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.
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ámetro | Descripción |
|---|---|
$str | La string a convertir. |
$from | Un carácter único que identifica el conjunto de caracteres de origen. |
$to | Un 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ódigo | Conjunto de caracteres |
|---|---|
k | KOI8-R |
w | Windows-1251 |
i | ISO 8859-5 |
a / d | x-cp866 (DOS) |
m | x-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
$fromdeclarada. - Su función está completamente cubierta por las funciones de propósito general
iconv()ymb_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().