Signatur
Beschreibung
iconv_mime_decode() wandelt MIME-kodierte Header-Felder gemäß RFC 2047 in einen lesbaren String um. Solche Felder tauchen häufig in E-Mail-Headern auf, zum Beispiel im Subject:- oder From:-Feld, und können Base64- (?B?) oder Quoted-Printable-Kodierungen (?Q?) enthalten.
Der Parameter $mode steuert, wie mit fehlerhaften oder nicht konformen Zeichenfolgen umgegangen wird. Die verfügbaren Flags sind ICONV_MIME_DECODE_STRICT (strenge RFC-Konformität) und ICONV_MIME_DECODE_CONTINUE_ON_ERROR (Fehler ignorieren und weitermachen). Beide Flags können mit dem bitweisen OR-Operator kombiniert werden.
Mit dem optionalen Parameter $encoding lässt sich die Zielzeichenkodierung des zurückgegebenen Strings festlegen. Wird null übergeben, wird der interne iconv-Zeichensatz verwendet, der über iconv_set_encoding() gesetzt oder aus der iconv.internal_encoding-INI-Direktive gelesen wird.
Die Funktion ist besonders nützlich beim Parsen von E-Mails, da Header-Felder sehr unterschiedliche Kodierungen enthalten können. Für das gleichzeitige Dekodieren mehrerer Header-Felder eignet sich iconv_mime_decode_headers().
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Das zu dekodierende MIME-kodierte Header-Feld, z. B. =?UTF-8?B?SGVsbG8gV2VsdA==?=. |
|
| $mode | int | 0 | Steuert das Verhalten bei fehlerhaften kodierten Wörtern. Mögliche Flags: ICONV_MIME_DECODE_STRICT (strenge Konformität erzwingen) und ICONV_MIME_DECODE_CONTINUE_ON_ERROR (bei Fehlern fortfahren). Können mit | kombiniert werden. |
| $encoding | ?string | null | Die gewünschte Zielzeichenkodierung des Rückgabestrings, z. B. 'UTF-8'. Bei null wird die interne iconv-Zeichenkodierung verwendet. |
Rückgabewert
false zurückgegeben.Beispiele
Einfaches Dekodieren eines Base64-kodierten E-Mail-Betreffs
<?php
// Typischer MIME-kodierter Subject-Header aus einer E-Mail
$mimeHeader = '=?UTF-8?B?SGVsbG8gV2VsdCE=?=';
$decoded = iconv_mime_decode($mimeHeader, 0, 'UTF-8');
if ($decoded !== false) {
echo $decoded; // Gibt: Hello World!
} else {
echo 'Dekodierung fehlgeschlagen.';
}
Dekodierung mit Fehlertoleranz (CONTINUE_ON_ERROR)
<?php
// Header mit leicht fehlerhafter Kodierung — im toleranten Modus wird trotzdem versucht zu dekodieren
$mimeHeader = '=?UTF-8?Q?Betreff=3A_Ihre_Bestellung_wurde_best=C3=A4tigt?=';
$decoded = iconv_mime_decode(
$mimeHeader,
ICONV_MIME_DECODE_CONTINUE_ON_ERROR,
'UTF-8'
);
echo $decoded;
Verarbeitung eines realen E-Mail-Headers
<?php
// Simulierter E-Mail-Header-Block
$rawHeader = 'From: =?ISO-8859-1?Q?Max_M=FCller?= <max@example.com>';
// Nur den kodierten Teil extrahieren und dekodieren
preg_match('/=\?[^?]+\?[BQbq]\?[^?]+\?=/', $rawHeader, $matches);
if (isset($matches[0])) {
$name = iconv_mime_decode($matches[0], 0, 'UTF-8');
echo 'Absender: ' . $name;
}
// Wichtig · Fallstricke
Zeichenkodierung: Stellen Sie sicher, dass die gewünschte Zielkodierung (z. B. UTF-8) von der iconv-Bibliothek auf dem Server unterstützt wird. Andernfalls gibt die Funktion false zurück, ohne eine aussagekräftige Fehlermeldung zu erzeugen.
Strenger Modus: Mit dem Flag ICONV_MIME_DECODE_STRICT werden E-Mails von manchen älteren oder nicht RFC-konformen Clients möglicherweise nicht korrekt dekodiert. Für die Praxis empfiehlt sich oft ICONV_MIME_DECODE_CONTINUE_ON_ERROR.
Alternative: Für das Dekodieren mehrerer Header-Felder auf einmal ist iconv_mime_decode_headers() effizienter als der wiederholte Aufruf von iconv_mime_decode().