W3docs

convert_cyr_string()

La función convert_cyr_string() convertía cadenas entre conjuntos de caracteres cirílicos. Eliminada en PHP 8.0; usa mb_convert_encoding() o iconv() en su lugar.

Advertencia

convert_cyr_string() fue obsoleta en PHP 7.4 y eliminada en PHP 8.0. Es una función heredada que no debe usarse en código moderno. Para convertir entre codificaciones de caracteres, usa mb_convert_encoding() o iconv() — consulta la sección de migración más abajo.

Este capítulo explica qué hacía convert_cyr_string(), por qué existía, por qué fue eliminada y qué usar en su lugar. Es material de referencia para leer o mantener código PHP antiguo, no una función que debas llamar en código nuevo.

Qué hacía convert_cyr_string()

La función convertía una string de un conjunto de caracteres cirílicos de un solo byte a otro. Antes de que UTF-8 se convirtiera en el estándar, el texto cirílico se almacenaba en varias codificaciones de 8 bits incompatibles entre sí (Windows-1251, KOI8-R, ISO 8859-5, página de códigos DOS 866 y algunos conjuntos Mac/mainframe). convert_cyr_string() reasignaba los bytes de uno de esos conjuntos heredados a otro.

Sintaxis

string convert_cyr_string ( string $str , string $from , string $to )

Recibía tres parámetros y devolvía la string convertida:

ParámetroDescripción
$strLa string a convertir.
$fromUn carácter único que identifica el conjunto de caracteres de origen.
$toUn carácter único que identifica el conjunto de caracteres de destino.

Los argumentos $from y $to eran códigos de una sola letra, no nombres completos de codificación:

CódigoConjunto de caracteres
kKOI8-R
wWindows-1251
iISO 8859-5
a / dx-cp866 (DOS)
mx-mac-cyrillic

Ejemplo

<?php
// Legacy code only — this throws a fatal error on PHP 8+.
$converted = convert_cyr_string($str, "w", "k"); // Windows-1251 -> KOI8-R
echo $converted;
?>

Aquí se asume que $str contiene bytes sin procesar en Windows-1251 ("w"), y la función los reescribe como bytes KOI8-R ("k"). Lo fundamental es que convert_cyr_string() operaba sobre bytes sin procesar y asumía que la string de origen ya estaba en la codificación indicada en $from. Si se le pasaba una string UTF-8 (el estándar moderno), la salida era texto ilegible (mojibake), porque los bytes UTF-8 no corresponden a ningún conjunto cirílico heredado de un solo byte.

Por qué fue eliminada

  • Solo conocía una lista fija de codificaciones cirílicas de 8 bits heredadas — UTF-8 nunca fue compatible, por lo que no podía participar en el manejo moderno de texto basado en Unicode.
  • Alteraba silenciosamente cualquier entrada que no estuviera realmente en la codificación $from declarada.
  • Su función está completamente cubierta por las funciones de propósito general iconv() y mb_convert_encoding(), que admiten cientos de codificaciones, incluida UTF-8.

Por estas razones fue marcada como obsoleta en PHP 7.4 y eliminada en PHP 8.0. Llamarla hoy provoca un Error fatal.

Qué usar en su lugar

Usa mb_convert_encoding() (de la extensión mbstring) o iconv(). Ambas aceptan nombres de codificación reales y ambas son compatibles con UTF-8:

<?php
// Convert Windows-1251 bytes to UTF-8.
$utf8 = mb_convert_encoding($legacy, "UTF-8", "Windows-1251");

// The same thing with iconv().
$utf8 = iconv("Windows-1251", "UTF-8", $legacy);

// Convert KOI8-R to UTF-8.
$utf8 = mb_convert_encoding($legacy, "UTF-8", "KOI8-R");
?>

Convertir a UTF-8 (en lugar de pasar entre dos conjuntos heredados) es casi siempre lo que necesitas: una vez que el texto está en UTF-8 funciona en todas partes en PHP moderno, bases de datos y navegadores.

Resumen

convert_cyr_string() era una utilidad pre-Unicode para intercambiar bytes entre codificaciones cirílicas heredadas. Ya no existe a partir de PHP 8.0. Si la encuentras en código antiguo, reemplaza cada llamada con iconv() o mb_convert_encoding() y migra tus datos a UTF-8.

Para más información sobre el trabajo con texto en PHP, consulta PHP Strings y htmlentities().

Práctica

Práctica
¿Qué hace la función 'iconv' de PHP según se describe en el artículo?
¿Qué hace la función 'iconv' de PHP según se describe en el artículo?
Was this page helpful?