W3docs

utf8_decode()

Die Funktion utf8_decode() ist eine PHP-Funktion, die einen String von UTF-8-Kodierung in ISO-8859-1-Kodierung umwandelt.

Die Funktion utf8_decode() ist eine in PHP eingebaute Funktion, die einen String von der UTF-8-Kodierung in ISO-8859-1 (auch Latin-1 genannt) umwandelt. UTF-8 kann jedes Unicode-Zeichen darstellen, während ISO-8859-1 eine Einzelbyte-Kodierung ist, die nur die ersten 256 Unicode-Codepunkte abdeckt (westeuropäische Buchstaben, Ziffern und Satzzeichen).

Diese Seite erläutert, was utf8_decode() tut, wann Sie die Funktion tatsächlich benötigen, den modernen Ersatz und das Verhalten bei Zeichen, die außerhalb von ISO-8859-1 liegen.

Wann (und ob) sie verwendet werden sollte

Sie benötigen utf8_decode() nur, wenn Sie UTF-8-Text in ein älteres System einspeisen, das ausschließlich ISO-8859-1 versteht — zum Beispiel eine veraltete Datenbankspalte, einen Bericht mit fester Breite oder eine Drittanbieter-API aus der Zeit vor Unicode. Für alles Neue sollten Sie Ihre Daten durchgängig in UTF-8 halten, und Sie werden diese Funktion nie benötigen.

Warnung

utf8_decode() ist ab PHP 8.2 veraltet und wird in einer zukünftigen Version entfernt. Ersetzen Sie sie durch mb_convert_encoding($string, 'ISO-8859-1', 'UTF-8') (die mbstring-Erweiterung) oder iconv('UTF-8', 'ISO-8859-1', $string). Die entgegengesetzte Konvertierung wird durch utf8_encode() durchgeführt.

Eine wesentliche Einschränkung: ISO-8859-1 hat keinen Platz für Zeichen wie , , Emoji oder beliebige nicht-lateinische Schriften. Wenn utf8_decode() auf ein Zeichen trifft, das es nicht darstellen kann, ersetzt es dieses durch ein Fragezeichen (?) — das ursprüngliche Zeichen geht verloren. Deshalb ist die Funktion verlustbehaftet und das Beibehalten von UTF-8 fast immer die bessere Wahl.

Syntax

Die Syntax der Funktion utf8_decode() lautet wie folgt:

utf8_decode(string $string): string
ParameterBeschreibung
$stringDer UTF-8-kodierte String, der in ISO-8859-1 umgewandelt werden soll.

Rückgabewert: der konvertierte ISO-8859-1-String. Bytes, die kein gültiges UTF-8 sind, und Zeichen ohne ISO-8859-1-Entsprechung werden in ein Fragezeichen (?) umgewandelt.

Verwendungsbeispiele

Schauen wir uns einige praktische Beispiele für die Verwendung von utf8_decode() in PHP an.

Beispiel 1: UTF-8-kodierten Text in ISO-8859-1 umwandeln

Der String "Zoë" ist in Ihrem Skript als UTF-8 gespeichert, wobei das ë zwei Bytes (c3 ab) belegt. Nach der Dekodierung wird ë zum einzelnen ISO-8859-1-Byte eb. Wir geben die rohen Bytes mit bin2hex() aus, damit die Änderung auf Byte-Ebene sichtbar ist:

UTF-8-kodierten Text in ISO-8859-1 in PHP umwandeln

php— editable, runs on the server

Die Ausgabe ist:

5a6feb

Die vier UTF-8-Bytes (Z, o und das zweibytige ë) werden auf drei ISO-8859-1-Bytes reduziert: 5a (Z), 6f (o) und eb (ë). Der String ist nun ein Byte kürzer, da das Zeichen mit Akzent in einem einzigen Byte statt in zwei kodiert ist.

Beispiel 2: Zeichen, die nicht dargestellt werden können

Da ISO-8859-1 nur 256 Codepunkte hat, gehen alle Zeichen außerhalb dieses Bereichs verloren. Das Eurozeichen () ist ein klassisches Beispiel — es existiert nicht in Latin-1:

<?php

echo utf8_decode("Price: €5");  // Price: ?5

?>

Das wird durch ? ersetzt. Wenn Sie Zeichen wie dieses erhalten möchten, konvertieren Sie nicht nach ISO-8859-1 — behalten Sie den Text in UTF-8, oder verwenden Sie eine reichhaltigere Zielkodierung.

Beispiel 3: UTF-8-Text aus XML lesen

SimpleXML parst XML immer als UTF-8. Wenn Sie diesen Text an ein Latin-1-System übergeben müssen, dekodieren Sie jeden Wert beim Lesen mit simplexml_load_file():

UTF-8-kodierten Text aus XML in PHP umwandeln

<?php

$xml = simplexml_load_file("data.xml");
foreach ($xml->item as $item) {
    $title = utf8_decode((string) $item->title);
    $description = utf8_decode((string) $item->description);
    echo "$title: $description\n";
}

?>

Dies lädt data.xml, durchläuft jedes <item>-Element und dekodiert den Text von <title> und <description> von UTF-8 nach ISO-8859-1. Jedes Element wird zuerst mit (string) in einen einfachen String umgewandelt, bevor es dekodiert wird.

Damit dieses Beispiel funktioniert, sollte data.xml eine Struktur wie diese enthalten:

<root>
  <item>
    <title>Example Title</title>
    <description>Example Description</description>
  </item>
</root>

Fazit

utf8_decode() wandelt UTF-8-Text in ISO-8859-1 um und verwirft dabei alle Zeichen, die Latin-1 nicht darstellen kann. Die Funktion ist nützlich für die Kommunikation mit Legacy-Systemen, ist jedoch ab PHP 8.2+ veraltet und verlustbehaftet. Bevorzugen Sie daher mb_convert_encoding() oder iconv() und halten Sie Ihre Daten wann immer möglich in UTF-8.

Für die entgegengesetzte Richtung, siehe utf8_encode(). Für mehr über die Arbeit mit Text in PHP, lesen Sie die Referenz zu PHP-String-Funktionen.

Übung

Übung
Was macht die Funktion utf8_decode in PHP?
Was macht die Funktion utf8_decode in PHP?
Was this page helpful?