Signatur
Beschreibung
iconv() wandelt den Inhalt einer Zeichenkette von einem Zeichensatz (z. B. ISO-8859-1) in einen anderen (z. B. UTF-8) um. Die Funktion nutzt die systemseitig installierte iconv-Bibliothek und unterstützt hunderte von Zeichensatz-Bezeichnungen, die plattformabhängig variieren können.
Besonders nützlich ist die Funktion beim Verarbeiten von Daten aus Datenquellen mit unterschiedlichen Kodierungen, z. B. beim Import von CSV-Dateien in ISO-8859-1 oder beim Parsen älterer Datenbank-Inhalte. Für den Ziel-Zeichensatz können die Suffixe //TRANSLIT (transkribiert Zeichen, die nicht direkt darstellbar sind) und //IGNORE (überspringt nicht konvertierbare Zeichen) angehängt werden.
Schlägt die Konvertierung fehl – etwa weil ein Zeichen im Ziel-Zeichensatz nicht existiert und kein Suffix gesetzt wurde –, gibt die Funktion false zurück. Mit //TRANSLIT werden solche Zeichen durch ähnliche ersetzt, mit //IGNORE werden sie still verworfen.
Für reine UTF-8-Anwendungen ist mb_convert_encoding() oft eine portable Alternative, da es nicht von der systemseitigen iconv-Bibliothek abhängig ist. iconv() ist jedoch schneller und deckt mehr Zeichensätze ab, wenn die Bibliothek verfügbar ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $from_encoding Pflicht | string | Bezeichnung des Quell-Zeichensatzes, z. B. "ISO-8859-1", "Windows-1252" oder "UTF-8". |
|
| $to_encoding Pflicht | string | Bezeichnung des Ziel-Zeichensatzes. Optional kann //TRANSLIT oder //IGNORE angehängt werden, z. B. "UTF-8//TRANSLIT" oder "ASCII//IGNORE". |
|
| $string Pflicht | string | Die zu konvertierende Zeichenkette. |
Rückgabewert
false zurückgegeben.Beispiele
ISO-8859-1 zu UTF-8 konvertieren
<?php
// Zeichenkette in ISO-8859-1 (typisch für ältere deutsche Texte)
$iso = "Sch\xF6ne Gr\xFC\xDFe aus M\xFCnchen";
$utf8 = iconv('ISO-8859-1', 'UTF-8', $iso);
if ($utf8 === false) {
echo "Konvertierung fehlgeschlagen.";
} else {
echo $utf8; // Schöne Grüße aus München
}
Nicht darstellbare Zeichen mit //TRANSLIT ersetzen
<?php
// Griechische Zeichen in ASCII transkribieren
$greek = "Αθήνα"; // UTF-8: Athen
$ascii = iconv('UTF-8', 'ASCII//TRANSLIT', $greek);
echo $ascii; // Athena (oder ähnliche Transkription, systemabhängig)
Nicht konvertierbare Zeichen mit //IGNORE verwerfen
<?php
$mixed = "Hello \xE2\x82\xAC World"; // enthält das Euro-Zeichen (UTF-8)
// Konvertierung nach ASCII, Euro-Zeichen wird ignoriert
$result = iconv('UTF-8', 'ASCII//IGNORE', $mixed);
echo $result; // Hello World
CSV-Datei mit falscher Kodierung einlesen
<?php
// Simuliert das Einlesen einer Zeile aus einer ISO-8859-1-kodierten CSV-Datei
$csvLine = "M\xFCller;D\xFCsseldorf;D\xE4nemark";
// Konvertierung für die weitere Verarbeitung in UTF-8
$utf8Line = iconv('ISO-8859-1', 'UTF-8', $csvLine);
$fields = explode(';', $utf8Line);
print_r($fields);
// Wichtig · Fallstricke
Systemabhängigkeit: Die verfügbaren Zeichensatz-Bezeichnungen hängen von der installierten iconv-Bibliothek des Betriebssystems ab und können zwischen Linux, macOS und Windows abweichen. Zur Laufzeit können mit iconv_get_encoding() die aktuellen Standardkodierungen abgefragt werden.
Fehlerbehandlung: Ohne //TRANSLIT oder //IGNORE bricht iconv() bei nicht konvertierbaren Zeichen ab und gibt false zurück. Der Rückgabewert sollte daher stets geprüft werden (=== false).
Portable Alternative: mb_convert_encoding() ist portabler, da es keine externe Bibliothek erfordert, unterstützt aber weniger Zeichensätze. Für moderne Projekte, die ausschließlich mit UTF-8 arbeiten, ist mb_convert_encoding() oder mb_internal_encoding() oft die bessere Wahl.
Performance: Beim Verarbeiten sehr großer Texte ist iconv() in der Regel schneller als mb_convert_encoding().