UConverter::transcode

(PHP 5 >= 5.5.0, PHP 7, PHP 8, PECL >= 3.0.0a1)

UConverter::transcodeConvierte una cadena de un juego de caracteres a otro

Descripción

public static UConverter::transcode(
    string $str,
    string $toEncoding,
    string $fromEncoding,
    ?array $options = null
): string|false

Convierte str de fromEncoding a toEncoding.

Parámetros

str

El chaîne de caractères a convertir.

toEncoding

El juego de caracteres deseado para el resultado.

fromEncoding

El juego de caracteres actual utilizado para interpretar str.

options

Un tableau 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.

Valores devueltos

Devuelve la cadena convertida, o false en caso de error.

Ejemplos

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 resultado del ejemplo sería:

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 resultado del ejemplo sería:

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 resultado del ejemplo sería:

1a
3f
3f

Ver también

  • mb_convert_encoding() - Convertir una cadena de un codificación de caracteres a otra
  • iconv() - Convierte una cadena de caracteres de un encodaje a otro