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| Parameter | Beschreibung |
|---|---|
$string | Der 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
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=A35Hier 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=
fghijabcdefghijENDDas 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 £5Verwandte Funktionen
quoted_printable_decode()— einen Quoted-Printable-String dekodieren.utf8_encode()— einen ISO-8859-1-String in UTF-8 konvertieren.utf8_decode()— einen UTF-8-String in ISO-8859-1 konvertieren.