(PHP 4, PHP 5, PHP 7, PHP 8)
utf8_decode — Convertit une chaîne UTF-8 en ISO-8859-1, en remplaçant les caractères invalides ou non représentables.
Cette fonction est OBSOLÈTE à partir de PHP 8.2.0. Dépendre de cette fonction est fortement déconseillé.
utf8_decode() décode la chaîne
string, en supposant qu'elle est au format
UTF-8, et la convertit au format
ISO-8859-1. Les octets dans la chaîne qui ne sont pas
valides en UTF-8 et les caractères UTF-8
qui n'existent pas en ISO-8859-1 (qui sont, les caractères
au-dessus de U+00FF) sont remplacés par ?.
Note:
De nombreuses pages Web marquées comme utilisant l'encodage de caractères
ISO-8859-1utilisent effectivement un encodage similaire àWindows-1252, et les navigateurs Web interpréteront les pages WebISO-8859-1commeWindows-1252. Les caractéristiques supplémentaires deWindows-1252sont des caractères imprimables, tels que le signe euro (€) et les guillemets bouclés (“”), à la place de certains caractères de contrôle de l'ISO-8859-1. Cette fonction ne convertira pas ces caractèresWindows-1252correctement. Utiliser une fonction différente si une conversionWindows-1252est nécessaire.
stringLa chaîne encodée UTF-8.
Retourne la chaîne string convertie en ISO-8859-1.
| Version | Description |
|---|---|
| 8.2.0 | Cette fonction a été rendue obsolète. |
| 7.2.0 | Cette fonction a été déplacée dans le cœur de PHP ; auparavant, il était nécessaire d'installer l'extension XML pour l'utiliser. |
Exemple #1 Exemple d'utilisation
<?php
// Convertit la chaîne 'Zoë' de UTF-8 à ISO 8859-1
$utf8_string = "\x5A\x6F\xC3\xAB";
$iso8859_1_string = utf8_decode($utf8_string);
echo bin2hex($iso8859_1_string), "\n";
// Les séquences UTF-8 non valides sont remplacées par '?'
$invalid_utf8_string = "\xC3";
$iso8859_1_string = utf8_decode($invalid_utf8_string);
var_dump($iso8859_1_string);
// Les caractères qui n'existent pas dans la norme ISO 8859-1,
// tels que '€' (signe de l'euro) sont également remplacés par '?'
$utf8_string = "\xE2\x82\xAC";
$iso8859_1_string = utf8_decode($utf8_string);
var_dump($iso8859_1_string);
?>L'exemple ci-dessus va afficher :
5a6feb string(1) "?" string(1) "?"
Note: Dépréciation et alternatives
Cette fonction est obsolète à partir de PHP 8.2.0 et sera supprimée dans une version future. Les utilisations existantes devraient être vérifiées et remplacées par des alternatives appropriées.
Une fonctionnalité similaire peut être obtenue avec mb_convert_encoding(), qui prend en charge ISO-8859-1 et de nombreux autres encodages de caractères.
<?php
$utf8_string = "\xC3\xAB"; // 'ë' (e tréma) en UTF-8
$iso8859_1_string = mb_convert_encoding($utf8_string, 'ISO-8859-1', 'UTF-8');
echo bin2hex($iso8859_1_string), "\n";
$utf8_string = "\xCE\xBB"; // 'λ' (lambda grec minuscule) en UTF-8
$iso8859_7_string = mb_convert_encoding($utf8_string, 'ISO-8859-7', 'UTF-8');
echo bin2hex($iso8859_7_string), "\n";
$utf8_string = "\xE2\x82\xAC"; // '€' (signe euro) en UTF-8 (absent en ISO-8859-1)
$windows_1252_string = mb_convert_encoding($utf8_string, 'Windows-1252', 'UTF-8');
echo bin2hex($windows_1252_string), "\n";
?>L'exemple ci-dessus va afficher :
eb eb 80D'autres options peuvent être disponibles en fonction des extensions installées, telles que UConverter::transcode() et iconv().
Les exemples suivants donnent tous le même résultat :
En spécifiant<?php
$utf8_string = "\x5A\x6F\xC3\xAB"; // 'Zoë' en UTF-8
$iso8859_1_string = utf8_decode($utf8_string);
echo bin2hex($iso8859_1_string), "\n";
$iso8859_1_string = mb_convert_encoding($utf8_string, 'ISO-8859-1', 'UTF-8');
echo bin2hex($iso8859_1_string), "\n";
$iso8859_1_string = iconv('UTF-8', 'ISO-8859-1', $utf8_string);
echo bin2hex($iso8859_1_string), "\n";
$iso8859_1_string = UConverter::transcode($utf8_string, 'ISO-8859-1', 'UTF8');
echo bin2hex($iso8859_1_string), "\n";
?>L'exemple ci-dessus va afficher :
5a6feb 5a6feb 5a6feb 5a6feb'?'comme option'to_subst'pour UConverter::transcode(), on obtient le même résultat que utf8_decode() pour les chaînes qui sont invalides ou qui ne peuvent pas être représentées en ISO 8859-1.<?php
$utf8_string = "\xE2\x82\xAC"; // € (signe euro) n'existe pas en ISO 8859-1
$iso8859_1_string = UConverter::transcode(
$utf8_string, 'ISO-8859-1', 'UTF-8', ['to_subst' => '?']
);
var_dump($iso8859_1_string);
?>L'exemple ci-dessus va afficher :
sring(1) "?"