Start · Sprachen · PHP · Referenz · mb_decode_mimeheader

mb_decode_mimeheader

Funktion

Dekodiert einen MIME-kodierten Header-String (z. B. <code>=?UTF-8?B?...?=</code> oder <code>=?ISO-8859-1?Q?...?=</code>) in einen normalen PHP-String.

seit PHP 4.0.6 Kategorie: string

Signatur

mb_decode_mimeheader(string $string): string

Beschreibung

mb_decode_mimeheader() dekodiert einen String, der nach dem MIME-Standard (RFC 2047) kodiert wurde, wie er typischerweise in E-Mail-Headern vorkommt (z. B. Subject:, From:, To:). Solche kodierten Strings haben das Format =?Zeichensatz?Kodierung?EnkodierterText?=, wobei die Kodierung entweder B (Base64) oder Q (Quoted-Printable) sein kann.

Die Funktion ist besonders nützlich beim Verarbeiten empfangener E-Mails, wenn Betreffzeilen oder Absendernamen Nicht-ASCII-Zeichen enthalten. Der zurückgegebene String verwendet die aktuell gesetzte interne Zeichenkodierung (mb_internal_encoding()).

Enthält der Eingabe-String mehrere kodierte Wörter (getrennt durch Leerzeichen oder Zeilenumbrüche), werden sie einzeln dekodiert und zusammengeführt. Unkodierte Teile werden unverändert übernommen.

Für den umgekehrten Weg – also das Kodieren eines Strings für einen MIME-Header – steht mb_encode_mimeheader() zur Verfügung.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der zu dekodierende MIME-Header-String, z. B. =?UTF-8?B?SGVsbG8gV2VsdA==?=. Kann auch gemischte kodierte und unkodierte Teile enthalten.

Rückgabewert

Typ
string
Beschreibung
Gibt den dekodierten String in der aktuellen internen Zeichenkodierung (mb_internal_encoding()) zurück. Enthält der Eingabe-String keine MIME-Kodierung, wird er unverändert zurückgegeben.

Beispiele

Dekodieren eines Base64-kodierten MIME-Headers (UTF-8)

<?php
mb_internal_encoding('UTF-8');

$encoded = '=?UTF-8?B?SGVsbG8gV2VsdCE=?=';
$decoded = mb_decode_mimeheader($encoded);

echo $decoded; // Gibt aus: Hello Welt!
Hello Welt!

Betreffzeile einer E-Mail mit Quoted-Printable-Kodierung dekodieren

<?php
mb_internal_encoding('UTF-8');

// Typischer E-Mail-Betreff mit deutschen Umlauten (ISO-8859-1, Quoted-Printable)
$subject = '=?ISO-8859-1?Q?Bestellung_best=E4tigt?=';
$decoded = mb_decode_mimeheader($subject);

echo $decoded; // Gibt aus: Bestellung bestätigt
Bestellung bestätigt

Gemischter Header mit kodierten und unkodierten Teilen

<?php
mb_internal_encoding('UTF-8');

// Header mit mehreren kodierten Wörtern und einem unkodierten Teil
$header = 'Re: =?UTF-8?B?QW50d29ydA==?= von Max';
$decoded = mb_decode_mimeheader($header);

echo $decoded; // Gibt aus: Re: Antwort von Max
Re: Antwort von Max

// Wichtig · Fallstricke

Interne Kodierung beachten: Das Ergebnis wird in die aktuell gesetzte interne Zeichenkodierung konvertiert. Wenn diese nicht korrekt gesetzt ist, kann es zu Zeichensatz-Problemen kommen. Setze sie vorher explizit mit mb_internal_encoding('UTF-8').

Ungültige Eingaben: Bei fehlerhaft kodierten MIME-Strings (z. B. unvollständige Kodierungssequenzen) kann das Ergebnis unvorhersehbar sein. Es wird keine Exception geworfen, sondern der String ggf. teilweise oder falsch dekodiert.

Whitespace zwischen kodierten Wörtern: Laut RFC 2047 wird Whitespace zwischen zwei aufeinanderfolgenden kodierten Wörtern bei der Dekodierung entfernt. Dies entspricht dem Standard, kann aber zu unerwarteten Ergebnissen führen, wenn man es nicht weiß.