Start · Sprachen · PHP · Referenz · iconv_mime_decode

iconv_mime_decode

Funktion

Dekodiert ein MIME-kodiertes Header-Feld (z. B. <code>=?UTF-8?B?...?=</code>) und gibt den dekodiertem Klartextstring zurück.

seit PHP 5.0.0 Kategorie: string

Signatur

iconv_mime_decode(string $string, int $mode = 0, ?string $encoding = null): string|false

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

Typ
string|false
Beschreibung
Gibt den dekodierten Klartextstring zurück. Bei einem Fehler (z. B. ungültige Kodierungsangabe oder strenger Modus bei fehlerhaftem Input) wird 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.';
}
Hello World!

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;
Betreff: Ihre Bestellung wurde bestätigt

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;
}
Absender: Max Müller

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