utf8_decode

(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.

Avertissement

Cette fonction est OBSOLÈTE à partir de PHP 8.2.0. Dépendre de cette fonction est fortement déconseillé.

Description

utf8_decode(string $string): string

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 caratères ISO-8859-1 utilisent effectivement un encodage similaire à Windows-1252, et les navigateurs Web interpréterons les pages Web ISO-8859-1 comme Windows-1252. Les caractéristiques supplémentaires de Windows-1252 sont 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ères Windows-1252 correctement. Utilisez une fonction différente si une conversion Windows-1252 est nécessaire.

Liste de paramètres

string

La chaîne encodée UTF-8.

Valeurs de retour

Retourne la chaîne string convertie en ISO-8859-1.

Historique

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.

Exemples

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 égalements 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) "?"

Notes

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 with diaeresis) in 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"; // 'λ' (Greek lower-case lambda) in 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"; // '€' (Euro sign) in UTF-8 (not present in 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
80

D'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 :

<?php
$utf8_string
= "\x5A\x6F\xC3\xAB"; // 'Zoë' in 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
En spécifiant '?' 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"; // € (Euro Sign) does not exist in 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) "?"

Voir aussi

  • utf8_encode() - Convertit une chaîne ISO-8859-1 en UTF-8
  • mb_convert_encoding() - Convertir une chaîne d'un codage de caractères à un autre
  • UConverter::transcode() - Convertit une chaîne depuis un jeu de caractères vers un autre jeu de caractères
  • iconv() - Convertit une chaîne de caractères à partir d'un encodage vers un autre