Signatur
Beschreibung
iconv_mime_decode_headers() analysiert einen mehrzeiligen String, der mehrere MIME-konform codierte E-Mail- oder HTTP-Header enthält (z. B. Subject:, From:, To:), und gibt ein assoziatives Array zurück, in dem jeder Schlüssel dem Header-Namen und jeder Wert dem dekodierten Header-Inhalt entspricht.
Die Funktion ist besonders nützlich, wenn mehrere Header gleichzeitig verarbeitet werden müssen, etwa beim Parsen von rohen E-Mail-Nachrichten oder beim Auswerten von HTTP-Antworten. Im Vergleich zu mehrfachen Aufrufen von iconv_mime_decode() für einzelne Felder ist dieser Ansatz effizienter und übersichtlicher.
Der Parameter $mode steuert das Verhalten bei fehlerhaft codierten Headern. Mit dem Flag ICONV_MIME_DECODE_STRICT (Wert 1) wird strikt nach RFC 2047 dekodiert; mit ICONV_MIME_DECODE_CONTINUE_ON_ERROR (Wert 2) werden Fehler ignoriert und die Verarbeitung fortgesetzt.
Kommt ein Header-Name mehrfach vor (z. B. mehrere Received:-Felder), enthält der entsprechende Wert im Rückgabe-Array ein indiziertes Unter-Array mit allen Vorkommen. Das Ziel-Encoding wird mit $encoding festgelegt; ist der Parameter null, wird der interne iconv-Zeichensatz verwendet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $headers Pflicht | string | Ein String mit einem oder mehreren MIME-codierten Header-Feldern, getrennt durch \r\n oder \n. Jede Zeile sollte dem Format Feldname: Wert entsprechen. |
|
| $mode | int | 0 | Steuert den Fehlerumgang beim Dekodieren. Mögliche Werte: ICONV_MIME_DECODE_STRICT (1) für striktes RFC-2047-Parsing, ICONV_MIME_DECODE_CONTINUE_ON_ERROR (2) um fehlerhafte Stellen zu überspringen. Beide Flags können per Bitwise-OR kombiniert werden. |
| $encoding | ?string | null | Der Name des Ziel-Zeichensatzes (z. B. UTF-8). Ist der Wert null, wird der mit iconv_set_encoding() gesetzte interne Zeichensatz verwendet. |
Rückgabewert
false zurückgegeben.Beispiele
Mehrere MIME-Header gleichzeitig dekodieren
<?php
$rawHeaders = "Subject: =?UTF-8?B?SGVsbG8gV2VsdA==?=\r\nFrom: =?UTF-8?Q?Max_M=C3=BCller?= <max@example.com>\r\nTo: info@example.com";
$decoded = iconv_mime_decode_headers($rawHeaders, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, 'UTF-8');
if ($decoded !== false) {
echo 'Subject: ' . $decoded['Subject'] . "\n";
echo 'From: ' . $decoded['From'] . "\n";
echo 'To: ' . $decoded['To'] . "\n";
} else {
echo 'Fehler beim Dekodieren der Header.';
}
Mehrfach vorkommende Header (z. B. Received)
<?php
$rawHeaders = "Received: from mail1.example.com (mail1.example.com [192.0.2.1])\r\nReceived: from mail2.example.com (mail2.example.com [192.0.2.2])\r\nSubject: Test";
$decoded = iconv_mime_decode_headers($rawHeaders, 0, 'UTF-8');
if ($decoded !== false) {
// 'Received' kommt zweimal vor -> wird als Array zurückgegeben
foreach ($decoded['Received'] as $index => $value) {
echo "Received[$index]: $value\n";
}
echo 'Subject: ' . $decoded['Subject'] . "\n";
}
// Wichtig · Fallstricke
Zeichensatz-Validierung: Stellen Sie sicher, dass das in $encoding angegebene Encoding von der iconv-Bibliothek des Systems unterstützt wird, andernfalls gibt die Funktion false zurück.
Sicherheitshinweis: Verarbeiten Sie Header aus nicht vertrauenswürdigen Quellen (z. B. E-Mails von Fremden) stets mit dem Flag ICONV_MIME_DECODE_CONTINUE_ON_ERROR, um bei manipulierten Headern nicht in einen Fehlerzustand zu geraten. Geben Sie dekodierte Header-Werte nie ungefiltert in HTML aus — verwenden Sie htmlspecialchars().
Zeilenfortsetzungen: MIME-Header können mehrzeilig sein (Folded Headers). Die Funktion verarbeitet diese korrekt, sofern die Folgezeilen mit einem Leerzeichen oder Tab beginnen, wie in RFC 2822 definiert.