Signatur
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
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!
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
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
// 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ß.