W3docs

quoted_printable_encode()

Die PHP-Funktion quoted_printable_encode() kodiert einen String in das Quoted-Printable-Format gemäß RFC 2045 für 7-Bit-sichere Übertragung.

Die PHP-Funktion quoted_printable_encode() kodiert einen 8-Bit-String in einen Quoted-Printable-String, die in RFC 2045 definierte MIME-Kodierung. Quoted-Printable hält druckbaren ASCII-Text lesbar, während Bytes sicher übertragen werden, die ältere 7-Bit-E-Mail-Systeme ansonsten beschädigen könnten — nicht druckbare und Nicht-ASCII-Bytes werden als =XX geschrieben, wobei XX der Bytewert in großgeschriebenen Hexadezimalzeichen ist.

Diese Seite behandelt die Syntax, die Funktionsweise der Kodierungsregeln, ausführbare Beispiele (einschließlich Nicht-ASCII- und Zeilenumbruchverhalten), häufige Anwendungsfälle und die Umkehrung der Operation.

Syntax

quoted_printable_encode(string $string): string
ParameterBeschreibung
$stringDer zu kodierende 8-Bit-String.

Rückgabewert: die Quoted-Printable-kodierte Version von $string.

So funktioniert die Kodierung

Drei Regeln decken fast jeden Fall ab:

  • Druckbares ASCII bleibt unverändert — Buchstaben, Ziffern und die meisten Satzzeichen werden unverändert übernommen, weshalb Quoted-Printable-Text noch größtenteils für Menschen lesbar ist.
  • Andere Bytes werden zu =XX — jedes Byte außerhalb des sicheren Bereichs (Steuerzeichen, = selbst und jedes Byte über 126, einschließlich UTF-8-Bytes von akzentuierten oder nicht-lateinischen Zeichen) wird als Gleichheitszeichen gefolgt von zwei Hex-Ziffern geschrieben.
  • Lange Zeilen werden weich umgebrochen — Zeilen werden bei maximal 76 Zeichen gehalten, indem ein „weicher Zeilenumbruch" eingefügt wird: ein nachgestelltes = unmittelbar gefolgt von einem Zeilenumbruch. Der Decoder entfernt ihn, sodass kein tatsächlicher Inhalt verloren geht.

Einfaches Beispiel

php— editable, runs on the server

Ausgabe:

Hello World!

Da 'Hello World!' ausschließlich druckbares ASCII enthält, ist die Ausgabe identisch mit der Eingabe — jedes Zeichen fällt unter die erste Regel.

Nicht-ASCII-Text kodieren

Die Kodierung ändert sich erst sichtbar, wenn der String Bytes enthält, die für den 7-Bit-Transport unsicher sind, wie zum Beispiel akzentuierte Buchstaben oder Symbole:

<?php
$string = 'Café costs £5';
echo quoted_printable_encode($string);
?>

Ausgabe:

Caf=C3=A9 costs =C2=A35

Hier sind é die zwei UTF-8-Bytes 0xC3 0xA9, kodiert als =C3=A9, und £ ist 0xC2 0xA3, kodiert als =C2=A3. Die einfachen ASCII-Zeichen drumherum bleiben unverändert.

Weiche Zeilenumbrüche bei langen Zeilen

Wenn eine Zeile 76 Zeichen überschreiten würde, fügt die Funktion einen weichen Zeilenumbruch (= plus einen Zeilenumbruch) ein, damit die Ausgabe innerhalb der E-Mail-Zeilenlimits bleibt:

<?php
$string = str_repeat('abcdefghij', 9) . 'END';
echo quoted_printable_encode($string);
?>

Ausgabe:

abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcde=
fghijabcdefghijEND

Das nachgestellte = vor dem Zeilenumbruch markiert den Bruch; ein Quoted-Printable-Decoder setzt die ursprüngliche einzelne Zeile wieder zusammen.

Wann man es verwenden sollte

Greifen Sie auf quoted_printable_encode() zurück, wenn Sie den Textkörper oder die Header einer E-Mail manuell aufbauen und eine 7-Bit-sichere Darstellung von überwiegend textuellen Inhalten benötigen — zum Beispiel beim Setzen des Content-Transfer-Encoding: quoted-printable-Teils einer MIME-Nachricht. Es ist die richtige Wahl, wenn die Daten überwiegend lesbarer Text mit gelegentlichen Sonderzeichen sind; für binäre oder stark nicht-textuelle Daten ist Base64-Kodierung kompakter.

In der Praxis wenden die meisten modernen Mail-Bibliotheken (PHPMailer, Symfony Mailer) diese Kodierung automatisch an, sodass Sie sie selten direkt aufrufen — sie ist jedoch unverzichtbar für das Debugging oder für Low-Level-Skripte, die rohe Nachrichten zusammenstellen.

Die Kodierung umkehren

Verwenden Sie quoted_printable_decode(), um einen Quoted-Printable-String wieder in die ursprünglichen 8-Bit-Daten umzuwandeln:

<?php
$encoded = quoted_printable_encode('Café costs £5');
echo quoted_printable_decode($encoded);
?>

Ausgabe:

Café costs £5

Verwandte Funktionen

Übung

Übung
Was macht die Funktion quoted_printable_encode() in PHP?
Was macht die Funktion quoted_printable_encode() in PHP?
Was this page helpful?