Signatur
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
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";
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";
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.';
// 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.