Start · Sprachen · PHP · Referenz · imap_mime_header_decode

imap_mime_header_decode

Funktion

Dekodiert MIME-kodierte Header-Felder (z. B. E-Mail-Betreff oder Absendername) und gibt ein Array von Elementen mit Zeichensatz und dekodiertem Text zurück.

seit PHP 4.0.0 Kategorie: http

Signatur

imap_mime_header_decode(string $string): array|false

Beschreibung

imap_mime_header_decode() analysiert einen MIME-kodierten Header-String gemäß RFC 2047 und zerlegt ihn in seine Bestandteile. Jedes Element enthält den ursprünglichen Zeichensatz (charset) sowie den dekodiert vorliegenden Text (text). Diese Funktion ist besonders nützlich, wenn E-Mail-Header Nicht-ASCII-Zeichen enthalten, die als =?UTF-8?B?...?= oder =?ISO-8859-1?Q?...?= kodiert sind.

Ein typischer Anwendungsfall ist das Dekodieren des Betreffs (Subject) oder des Absendernamens (From) einer E-Mail, bevor der Inhalt dem Benutzer angezeigt oder weiterverarbeitet wird. Die Funktion unterstützt sowohl Base64-Kodierung (Typ B) als auch Quoted-Printable-Kodierung (Typ Q).

Der zurückgegebene Array enthält für jedes erkannte kodierte Wort ein Objekt mit den Eigenschaften charset und text. Nicht kodierte Zeichenketten innerhalb des Headers erhalten als Zeichensatz den Wert default.

Beachte, dass die Funktion nur den Header-Wert selbst entgegennimmt (ohne den Header-Namen wie Subject: ). Außerdem konvertiert sie den Text nicht automatisch in eine andere Zielkodierung – eine anschließende Konvertierung mit iconv() oder mb_convert_encoding() kann notwendig sein.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der zu dekodende MIME-kodierte Header-String, z. B. der Wert des Subject- oder From-Feldes einer E-Mail (ohne den Header-Namen).

Rückgabewert

Typ
array|false
Beschreibung
Gibt im Erfolgsfall ein Array von Objekten zurück. Jedes Objekt hat zwei Eigenschaften: charset (der Zeichensatz des kodierten Segments, oder default für nicht kodierte Teile) und text (der dekodierte Text des Segments). Bei einem Fehler wird false zurückgegeben.

Beispiele

E-Mail-Betreff mit UTF-8-Kodierung dekodieren

<?php
// Simulierter MIME-kodierter Betreff einer E-Mail
$subject = '=?UTF-8?B?QW56YWhsIGRlciBOYWNocmljaHRlbg==?=';

$elements = imap_mime_header_decode($subject);

foreach ($elements as $element) {
    echo 'Zeichensatz: ' . $element->charset . PHP_EOL;
    echo 'Text:        ' . $element->text . PHP_EOL;
}
Zeichensatz: UTF-8 Text: Anzahl der Nachrichten

Gemischten Header mit kodierten und nicht-kodierten Teilen verarbeiten

<?php
// Header, der sowohl kodierte als auch reine ASCII-Anteile enthält
$from = 'Max =?ISO-8859-1?Q?M=FCller?= <max@example.com>';

$elements = imap_mime_header_decode($from);

$fullName = '';
foreach ($elements as $element) {
    if ($element->charset !== 'default' && strtolower($element->charset) !== 'utf-8') {
        // Konvertierung in UTF-8, falls nötig
        $fullName .= iconv($element->charset, 'UTF-8//TRANSLIT', $element->text);
    } else {
        $fullName .= $element->text;
    }
}

echo trim($fullName) . PHP_EOL;
Max Müller <max@example.com>

// Wichtig · Fallstricke

Erweiterungsabhängigkeit: Diese Funktion erfordert die IMAP-Erweiterung (ext/imap), die nicht immer standardmäßig aktiviert ist. Sie wurde in PHP 8.4 als missbilligt (deprecated) markiert, da die IMAP-Erweiterung insgesamt veraltet ist. Als Alternative bieten sich Bibliotheken wie ddeboer/imap oder mailparse_rfc822_parse_addresses() an.

Zeichensatzbehandlung: Die Funktion dekodiert den Text, konvertiert ihn aber nicht in eine einheitliche Zielkodierung. Segmente mit unterschiedlichen Zeichensätzen müssen anschließend manuell mit iconv() oder mb_convert_encoding() vereinheitlicht werden, bevor sie ausgegeben oder gespeichert werden.

Sicherheit: Da die Eingabe aus externen E-Mails stammt, sollte der dekodierte Text vor der Ausgabe immer mit htmlspecialchars() oder einem entsprechenden Mechanismus escaped werden, um XSS-Angriffe zu verhindern.