(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
.
str
El string a convertir.
toEncoding
El juego de caracteres deseado para el resultado.
fromEncoding
El juego de caracteres actual utilizado para interpretar str
.
options
Un 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