Start · Sprachen · PHP · Referenz · mb_encode_mimeheader

mb_encode_mimeheader

Funktion

Kodiert einen String als MIME-konformen Header-Wert (z. B. für <code>Subject:</code> oder <code>From:</code>) gemäß RFC 2047.

seit PHP 4.0.6 Kategorie: string

Signatur

mb_encode_mimeheader(string $string, ?string $charset = null, ?string $transfer_encoding = null, string $newline = "\r\n", int $indent = 0): string

Beschreibung

mb_encode_mimeheader() wandelt einen String so um, dass er sicher als Wert in einem E-Mail-Header verwendet werden kann. Da E-Mail-Header per Spezifikation nur US-ASCII enthalten dürfen, werden Nicht-ASCII-Zeichen nach RFC 2047 als sogenannte encoded words kodiert – entweder als Base64 (B) oder als Quoted-Printable (Q).

Die Funktion ist besonders nützlich beim Versenden von E-Mails mit mail() oder beim manuellen Aufbau von MIME-Nachrichten, wenn Betreff oder Absendername Umlaute oder andere Sonderzeichen enthalten. Das Ergebnis hat die Form =?charset?encoding?encoded_text?=.

Mit dem Parameter $indent lässt sich angeben, wie viele Zeichen die erste Zeile bereits eingerückt ist – dies beeinflusst den automatischen Zeilenumbruch langer Header-Werte (die Standardzeilenlänge beträgt 74 Zeichen ohne den Zeichensatz-Präfix).

Wichtig: Die Funktion erwartet, dass der Eingabe-String bereits in der durch mb_internal_encoding() festgelegten (oder explizit angegebenen) Kodierung vorliegt. Falsche Zeichensatz-Angaben führen zu unlesbaren Header-Werten.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der zu kodierende Header-Wert (z. B. ein Betreff oder ein Anzeigename).
$charset ?string null (intern: mb_language()-abhängige Voreinstellung) Zeichensatz des Eingabe-Strings, z. B. 'UTF-8' oder 'ISO-8859-1'. Wenn null, wird der über mb_internal_encoding() gesetzte Zeichensatz verwendet.
$transfer_encoding ?string null (intern: 'B') Übertragungskodierung: 'B' für Base64 (Standard) oder 'Q' für Quoted-Printable.
$newline string "\r\n" Zeilenumbruch-Sequenz, die beim Falten langer Header-Zeilen eingefügt wird. Für RFC-2822-konforme E-Mails sollte der Standardwert "\r\n" beibehalten werden.
$indent int 0 Anzahl der Zeichen, um die die erste Zeile bereits eingerückt ist. Beeinflusst, ab welcher Position der erste automatische Zeilenumbruch eingefügt wird.

Rückgabewert

Typ
string
Beschreibung
Den MIME-kodierten Header-String als ASCII-Text. Im Fehlerfall (z. B. unbekannter Zeichensatz) gibt die Funktion false zurück.

Beispiele

Betreff-Header mit Umlauten kodieren

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

$subject = 'Ärgerliche Übergabe: Öffnungszeiten ändern';
$encoded = mb_encode_mimeheader($subject, 'UTF-8', 'B', "\r\n");

echo 'Subject: ' . $encoded . "\r\n";
Subject: =?UTF-8?B?w4Ryc2VybGljaGUgw5xiZXJnYWJlOiDDlmZmbnVuZ3N6ZWl0ZW4gw6RuZGVybg==?=

Absendername mit Quoted-Printable kodieren

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

$name    = 'Müller & Söhne GmbH';
$encoded = mb_encode_mimeheader($name, 'UTF-8', 'Q');
$from    = $encoded . ' <info@example.com>';

echo 'From: ' . $from . "\r\n";
From: =?UTF-8?Q?M=C3=BCller_=26_S=C3=B6hne_GmbH?= <info@example.com>

Einsatz mit mail() zum Versenden einer E-Mail

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

$to      = 'empfaenger@example.com';
$subject = mb_encode_mimeheader('Bestellung über 5 € eingegangen', 'UTF-8', 'B');
$message = 'Ihre Bestellung wurde erfolgreich registriert.';
$headers = 'From: ' . mb_encode_mimeheader('Muster-Shop', 'UTF-8', 'B') . ' <shop@example.com>';

mail($to, $subject, $message, $headers);
echo 'E-Mail gesendet.';
E-Mail gesendet.

// Wichtig · Fallstricke

Zeichensatz-Konsistenz: Stellen Sie sicher, dass der tatsächliche Zeichensatz des Strings mit dem im Parameter $charset angegebenen übereinstimmt. Andernfalls entstehen korrumpierte Header, die von Mailclients falsch dekodiert werden.

Zeilenlänge: RFC 2047 empfiehlt, Header-Zeilen auf 76 Zeichen zu begrenzen. mb_encode_mimeheader() bricht lange Werte automatisch um und fügt den angegebenen $newline-String plus ein Leerzeichen (Folding) ein.

Gegenstück: Zum Dekodieren von MIME-kodierten Header-Werten steht mb_decode_mimeheader() zur Verfügung.

Sicherheit: Wenn Header-Werte aus Benutzereingaben stammen, sollten Zeilenumbrüche (\r, \n) aus dem Eingabe-String entfernt werden, bevor er an diese Funktion übergeben wird, um Header-Injection-Angriffe zu verhindern.