(PHP 5 >= 5.5.0, PHP 7, PHP 8, PECL >= 3.0.0a1)
UConverter::transcode — Convertit une chaîne d'un jeu de caractères à un autre
$str,$toEncoding,$fromEncoding,$options = null
Convertit str de fromEncoding à toEncoding.
strLa chaîne de caractères à convertir.
toEncodingLe jeu de caractères souhaité pour le résultat.
fromEncoding
Le jeu de caractères actuel utilisé pour interpréter str.
optionsUn tableau optionnel, qui peut contenir les clés suivantes :
'to_subst' - le caractère de substitution à utiliser
à la place de tout caractère de str qui ne peut pas
être encodé en toEncoding. S'il est spécifié, il doit
représenter un seul caractère dans l'encodage cible.
Retourne la chaîne convertie, ou false si une erreur survient.
Exemple #1 Conversion de UTF-8 à UTF-16 et inversement
<?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";
?>L'exemple ci-dessus va afficher :
005a006f00eb 5a6fc3ab
Exemple #2 Caractères non valides en entrée
Si la chaîne d'entrée contient une séquence d'octets qui n'est pas valide dans
l'encodage spécifié par fromEncoding, ils sont remplacés
par le point de code Unicode U+FFFD (Caractère de remplacement) avant d'être
convertis en toEncoding.
<?php
$invalid_utf8_string = "\xC3"; // séquence multi-octets UTF-8 incomplète
$utf16_string = UConverter::transcode($invalid_utf8_string, 'UTF-16BE', 'UTF-8');
echo bin2hex($utf16_string), "\n";
?>L'exemple ci-dessus va afficher :
fffd
Exemple #3 Caractères ne pouvant être encodés
Si la chaîne d'entrée contient des caractères qui ne peuvent pas être représentés
en toEncoding, ils sont remplacés par un seul caractère.
Le caractère par défaut à utiliser dépend de l'encodage et peut être contrôlé à
l'aide de l'option 'to_subst'.
<?php
$utf8_string = "\xE2\x82\xAC"; // € (signe euro) n'existe pas dans l'ISO 8859-1
// Le remplacement par défaut dans ISO 8859-1 est "\x1A" (Substitut)
$iso8859_1_string = UConverter::transcode($utf8_string, 'ISO-8859-1', 'UTF-8');
echo bin2hex($iso8859_1_string), "\n";
// Spécifie un remplacement de '?' ("\x3F") à la place
$iso8859_1_string = UConverter::transcode(
$utf8_string, 'ISO-8859-1', 'UTF-8', ['to_subst' => '?']
);
echo bin2hex($iso8859_1_string), "\n";
// Puisque l'ISO 8859-1 ne peut pas mapper U+FFFD, l'entrée invalide est également remplacée par to_subst.
$invalid_utf8_string = "\xC3"; // séquence multi-octets UTF-8 incomplète
$iso8859_1_string = UConverter::transcode(
$invalid_utf8_string, 'ISO-8859-1', 'UTF-8', ['to_subst' => '?']
);
echo bin2hex($iso8859_1_string), "\n";
?>L'exemple ci-dessus va afficher :
1a 3f 3f