Start · Sprachen · PHP · Referenz · iconv

iconv

Funktion

Konvertiert eine Zeichenkette vom Quell-Zeichensatz <code>from_encoding</code> in den Ziel-Zeichensatz <code>to_encoding</code>.

seit PHP 4.0.5 Kategorie: string

Signatur

iconv(string $from_encoding, string $to_encoding, string $string): string|false

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

Typ
string|false
Beschreibung
Gibt die konvertierte Zeichenkette zurück. Im Fehlerfall (z. B. ungültige Zeichensatz-Bezeichnung oder nicht konvertierbares Zeichen ohne Suffix) wird 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
}
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)
Athena

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
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);
Array ( [0] => Müller [1] => Düsseldorf [2] => Dänemark )

// 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().