(PHP 5 >= 5.5.0, PHP 7, PHP 8, PECL >= 3.0.0a1)
UConverter::transcode — Convierte una cadena de un juego de caracteres a otro
$str,$toEncoding,$fromEncoding,$options = null
Convierte str de fromEncoding a toEncoding.
strEl string a convertir.
toEncodingEl juego de caracteres deseado para el resultado.
fromEncoding
El juego de caracteres actual utilizado para interpretar str.
optionsUn array opcional, que puede contener las siguientes claves:
'to_subst' - el carácter de sustitución a utilizar
en lugar de cualquier carácter de str que no pueda
ser codificado en toEncoding. Si se especifica, debe
representar un solo carácter en el codificación objetivo.
Devuelve la cadena convertida, o false si ocurre un error.
Ejemplo #1 Conversión de UTF-8 a UTF-16 y viceversa
<?php
$utf8_string = "\x5A\x6F\xC3\xAB"; // 'Zoë' en UTF-8
$utf16_string = UConverter::transcode($utf8_string, 'UTF-16BE', 'UTF-8');
echo bin2hex($utf16_string), "\n";
$new_utf8_string = UConverter::transcode($utf16_string, 'UTF-8', 'UTF-16BE');
echo bin2hex($new_utf8_string), "\n";
?>El ejemplo anterior mostrará:
005a006f00eb 5a6fc3ab
Ejemplo #2 Caracteres no válidos en la entrada
Si la cadena de entrada contiene una secuencia de octetos que no es válida en
el codificación especificado por fromEncoding, son reemplazados
por el punto de código Unicode U+FFFD (Carácter de reemplazo) antes de ser
convertidos a toEncoding.
<?php
$invalid_utf8_string = "\xC3"; // secuencia multi-octetos UTF-8 incompleta
$utf16_string = UConverter::transcode($invalid_utf8_string, 'UTF-16BE', 'UTF-8');
echo bin2hex($utf16_string), "\n";
?>El ejemplo anterior mostrará:
fffd
Ejemplo #3 Caracteres que no pueden ser codificados
Si la cadena de entrada contiene caracteres que no pueden ser representados
en toEncoding, son reemplazados por un solo carácter.
El carácter por defecto a utilizar depende del codificación y puede ser controlado
mediante la opción 'to_subst'.
<?php
$utf8_string = "\xE2\x82\xAC"; // € (símbolo euro) no existe en el ISO 8859-1
// El reemplazo por defecto en ISO 8859-1 es "\x1A" (Sustituto)
$iso8859_1_string = UConverter::transcode($utf8_string, 'ISO-8859-1', 'UTF-8');
echo bin2hex($iso8859_1_string), "\n";
// Especifica un reemplazo de '?' ("\x3F") en su lugar
$iso8859_1_string = UConverter::transcode(
$utf8_string, 'ISO-8859-1', 'UTF-8', ['to_subst' => '?']
);
echo bin2hex($iso8859_1_string), "\n";
// Dado que el ISO 8859-1 no puede mapear U+FFFD, la entrada inválida también es reemplazada por to_subst.
$invalid_utf8_string = "\xC3"; // secuencia multi-octetos UTF-8 incompleta
$iso8859_1_string = UConverter::transcode(
$invalid_utf8_string, 'ISO-8859-1', 'UTF-8', ['to_subst' => '?']
);
echo bin2hex($iso8859_1_string), "\n";
?>El ejemplo anterior mostrará:
1a 3f 3f