(PHP 4, PHP 5, PHP 7, PHP 8)
utf8_decode — Konvertiert eine Zeichenkette von UTF-8 nach ISO-8859-1 und ersetzt ungültige und nicht darstellbare Zeichen
Diese Funktion ist seit PHP 8.2.0 als DEPRECATED (veraltet) markiert. Von der Verwendung dieser Funktion wird dringend abgeraten.
Diese Funktion konvertiert die Zeichenkette string
von der UTF-8
-Kodierung nach
ISO-8859-1
. Bytes in der Zeichenkette, die kein gültiges
UTF-8
sind, und UTF-8
-Zeichen, die
nicht in ISO-8859-1
existieren (also Codepoints größer
als U+00FF
), werden durch ?
ersetzt.
Hinweis:
Viele Webseiten, die ausgewiesen sind, die
ISO-8859-1
-Zeichenkodierung zu verwenden, nutzen in Wirklichkeit die ähnlicheWindows-1252
-Kodierung, und Webbrowser interpretierenISO-8859-1
-Webseiten alsWindows-1252
.Windows-1252
ermöglicht zusätzliche druckbare Zeichen, so wie das Euro-Zeichen (€
) und geschweifte Anführungszeichen (“
”
), anstelle von bestimmtenISO-8859-1
-Kontrollzeichen. Diese Funktion konvertiert solcheWindows-1252
-Zeichen nicht korrekt. Verwenden Sie eine andere Funktion, wennWindows-1252
-Konvertierung erforderlich ist.
string
Eine UTF-8-kodierte Zeichenkette.
Gibt die ISO-8859-1-Übersetzung von string
zurück.
Version | Beschreibung |
---|---|
8.2.0 | Diese Funktion ist veraltet. |
7.2.0 | Diese Funktion wurde von der Erweiterung XML in den Kern von PHP verschoben. In früheren Versionen war diese Funktion nur verfügbar, wenn die Erweiterung XML installiert war. |
Beispiel #1 Grundlegende Beispiele
<?php
// Konvertiert die Zeichenkette "Zoë" von UTF-8 nach ISO 8859-1
$utf8_string = "\x5A\x6F\xC3\xAB";
$iso8859_1_string = utf8_decode($utf8_string);
echo bin2hex($iso8859_1_string), "\n";
// Ungültige UTF-8-Sequenzen werden durch '?' ersetzt
$invalid_utf8_string = "\xC3";
$iso8859_1_string = utf8_decode($invalid_utf8_string);
var_dump($iso8859_1_string);
// Zeichen, die es in ISO 8859-1 nicht gibt, z. B. '€'
// (Euro-Zeichen), werden ebenfalls durch '?' ersetzt
$utf8_string = "\xE2\x82\xAC";
$iso8859_1_string = utf8_decode($utf8_string);
var_dump($iso8859_1_string);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
5a6feb string(1) "?" string(1) "?"
Hinweis: Wegfall und Alternativen
Diese Funktion ist ab PHP 8.2.0 veraltet und wird in einer zukünftigen Version entfernt. Bereits vorhandene Verwendungen sollten überprüft und durch geeignete Alternativen ersetzt werden.
Die Funktion mb_convert_encoding() bietet eine ähnliche Funktionalität und unterstützt ISO-8859-1 und viele andere Zeichenkodierungen.
<?php
$utf8_string = "\xC3\xAB"; // 'ë' (e mit Trema) 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"; // 'λ' (griechisches Lambda kleingeschrieben) 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-Zeichen) in UTF-8 (in ISO-8859-1 nicht vorhanden)
$windows_1252_string = mb_convert_encoding($utf8_string, 'Windows-1252', 'UTF-8');
echo bin2hex($windows_1252_string), "\n";
?>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
eb eb 80Andere Optionen, die in Abhängigkeit von den installierten Erweiterungen verfügbar sein können, sind UConverter::transcode() und iconv().
Die folgenden Beispiele führen alle zum selben Ergebnis:
Wenn bei UConverter::transcode()<?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";
?>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
5a6feb 5a6feb 5a6feb 5a6feb'?'
als Option für'to_subst'
angegeben wird, führt dies bei ungültigen oder nicht in ISO 8859-1 darstellbaren Zeichenketten zum selben Ergebnis wie utf8_decode().<?php
$utf8_string = "\xE2\x82\xAC"; // € (Euro-Zeichen) ist in ISO-8859-1 nicht vorhanden
$iso8859_1_string = UConverter::transcode(
$utf8_string, 'ISO-8859-1', 'UTF-8', ['to_subst' => '?']
);
var_dump($iso8859_1_string);
?>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
sring(1) "?"