(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
.
str
La chaîne de caractères à convertir.
toEncoding
Le jeu de caractères souhaité pour le résultat.
fromEncoding
Le jeu de caractères actuel utilisé pour interpréter str
.
options
Un 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