utf8_decode

(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

Warnung

Diese Funktion ist seit PHP 8.2.0 als DEPRECATED (veraltet) markiert. Von der Verwendung dieser Funktion wird dringend abgeraten.

Beschreibung

utf8_decode(string$string): string

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 ähnliche Windows-1252-Kodierung, und Webbrowser interpretieren ISO-8859-1-Webseiten als Windows-1252. Windows-1252 ermöglicht zusätzliche druckbare Zeichen, so wie das Euro-Zeichen () und geschweifte Anführungszeichen (), anstelle von bestimmten ISO-8859-1-Kontrollzeichen. Diese Funktion konvertiert solche Windows-1252-Zeichen nicht korrekt. Verwenden Sie eine andere Funktion, wenn Windows-1252-Konvertierung erforderlich ist.

Parameter-Liste

string

Eine UTF-8-kodierte Zeichenkette.

Rückgabewerte

Gibt die ISO-8859-1-Übersetzung von string zurück.

Changelog

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

Beispiele

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

Anmerkungen

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 80

Andere 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:

<?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
Wenn bei UConverter::transcode()'?' 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) "?"

Siehe auch

To Top