Signatur
Beschreibung
utf8_decode() wandelt eine in UTF-8 kodierte Zeichenkette in die Zeichenkodierung ISO-8859-1 (Latin-1) um. Zeichen, die in ISO-8859-1 nicht darstellbar sind (also alle Zeichen außerhalb des Bereichs U+0000–U+00FF), werden durch ein Fragezeichen (?) ersetzt.
Die Funktion ist nützlich, wenn ältere Systeme, Datenbanken oder Schnittstellen ausschließlich ISO-8859-1 erwarten und die Eingabedaten in UTF-8 vorliegen. In modernen Anwendungen sollte jedoch durchgängig UTF-8 verwendet werden, um Datenverluste durch Zeichenersetzung zu vermeiden.
Hinweis: Seit PHP 8.2 ist utf8_decode() als veraltet (deprecated) markiert und wird in einer zukünftigen PHP-Version entfernt. Es wird empfohlen, stattdessen mb_convert_encoding($string, 'ISO-8859-1', 'UTF-8') oder iconv('UTF-8', 'ISO-8859-1', $string) zu verwenden, die flexibler und robuster sind.
Da ISO-8859-1 nur 256 Zeichen umfasst, gehen alle Zeichen außerhalb dieses Bereichs (z. B. osteuropäische, kyrillische, chinesische Zeichen) unwiderruflich verloren. Die Funktion eignet sich daher nur für Texte, die ausschließlich lateinische Grundzeichen und Sonderzeichen aus dem westeuropäischen Raum enthalten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Die zu konvertierende UTF-8-kodierte Zeichenkette. |
Rückgabewert
? ersetzt.Beispiele
Einfache Konvertierung von UTF-8 nach ISO-8859-1
<?php
$utf8String = "Hallo, schöne Welt! Ä, Ö, Ü";
$iso88591String = utf8_decode($utf8String);
echo $iso88591String; // Ausgabe je nach Terminal-Kodierung
echo strlen($utf8String) . PHP_EOL; // Längere Bytefolge in UTF-8
echo strlen($iso88591String) . PHP_EOL; // Kürzere Bytefolge in ISO-8859-1
Moderne Alternative mit mb_convert_encoding (empfohlen ab PHP 8.2)
<?php
$utf8String = "Café au lait – typisch französisch!";
// Veraltet (deprecated seit PHP 8.2):
// $result = utf8_decode($utf8String);
// Empfohlene Alternative:
$result = mb_convert_encoding($utf8String, 'ISO-8859-1', 'UTF-8');
echo $result . PHP_EOL;
// Zeichen außerhalb von ISO-8859-1 gehen verloren:
$chineseUtf8 = "你好";
$converted = mb_convert_encoding($chineseUtf8, 'ISO-8859-1', 'UTF-8');
echo $converted . PHP_EOL; // Gibt '??' aus – Datenverlust!
// Wichtig · Fallstricke
Deprecated seit PHP 8.2: utf8_decode() wurde in PHP 8.2 als veraltet markiert und erzeugt eine E_DEPRECATED-Warnung. Die Funktion wird in einer zukünftigen Version entfernt. Nutze stattdessen mb_convert_encoding($string, 'ISO-8859-1', 'UTF-8') oder iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $string).
Datenverlust: Alle Zeichen außerhalb des ISO-8859-1-Bereichs (z. B. osteuropäische, asiatische oder arabische Zeichen) werden durch ein ? ersetzt und sind nicht wiederherstellbar. In modernen Anwendungen sollte durchgängig UTF-8 verwendet werden.
Verwechslungsgefahr: utf8_decode() konvertiert nach ISO-8859-1. Für die umgekehrte Richtung (ISO-8859-1 → UTF-8) existiert utf8_encode(), die ebenfalls seit PHP 8.2 deprecated ist.