quoted_printable_decode()
Unser Artikel erklärt die PHP-Funktion quoted_printable_decode(), mit der ein Quoted-Printable-String dekodiert werden kann.
Die PHP-Funktion quoted_printable_decode() wandelt einen Quoted-Printable-String zurück in seine ursprüngliche 8-Bit-Form. Quoted-Printable ist eine Kodierung, die durch MIME (RFC 2045) definiert wird und es ermöglicht, Text mit Nicht-ASCII-Bytes sicher durch Systeme zu übertragen — hauptsächlich E-Mail — die ursprünglich nur für einfaches 7-Bit-ASCII ausgelegt waren. Diese Seite erklärt, wie die Kodierung aussieht, wann Sie sie tatsächlich dekodieren müssen und worauf Sie achten sollten.
Was ist Quoted-Printable?
Bei der Quoted-Printable-Kodierung wird jedes Byte, das kein „sicheres" druckbares ASCII-Zeichen ist, als Gleichheitszeichen gefolgt von seinem zweistelligen Hexadezimalwert geschrieben. Zum Beispiel kann ein Leerzeichen als =20 erscheinen, und der Buchstabe mit Akzent è (UTF-8-Bytefolge C3 A8) wird zu =C3=A8. Ein einzelnes = am Zeilenende ist ein weiches Zeilenumbruchzeichen, das verwendet wird, um kodierte Zeilen unter 76 Zeichen zu halten; es wird beim Dekodieren entfernt.
Diese Kodierung begegnet Ihnen am häufigsten im Körper und in den Headern von E-Mail-Nachrichten, wobei der Header Content-Transfer-Encoding: quoted-printable dem Client mitteilt, wie der Text gespeichert wurde.
Syntax
quoted_printable_decode(string $string): stringDie Funktion nimmt ein einziges Argument entgegen und gibt den dekodierten String zurück.
| Parameter | Typ | Beschreibung |
|---|---|---|
$string | string | Der zu dekodierende Quoted-Printable-String. |
Rückgabewert: der dekodierte 8-Bit-String. Sequenzen, die kein gültiges Quoted-Printable sind, werden unverändert zurückgegeben, anstatt einen Fehler auszulösen.
Einfaches Beispiel
Hier ist =20 der Hexadezimalcode für ein Leerzeichen (ASCII 32), sodass die Ausgabe lautet:
Hello World!Akzentzeichen und weiche Zeilenumbrüche dekodieren
Die Funktion eignet sich besonders gut für reale Inhalte, die kodierte Multibyte-Zeichen mit den weichen Zeilenumbrüchen (= am Zeilenende) mischen, die zum Umbrechen langer Zeilen verwendet werden:
<?php
$encoded = "J=27interpr=C3=A8te=20du=20fran=C3=A7ais,=\n et c=27est tout.";
echo quoted_printable_decode($encoded);
?>Ausgabe:
J'interprète du français, et c'est tout.Beachten Sie zwei Dinge: Jedes =XX-Paar (wie =C3=A8 für è) wird in sein rohes Byte zurückgewandelt, und das abschließende = gefolgt von einem Zeilenumbruch wird vollständig entfernt, wodurch die zwei Zeilen zu einer zusammengefügt werden.
Wann würde ich es verwenden?
Greifen Sie auf quoted_printable_decode() zurück, wenn Sie rohe E-Mails lesen — zum Beispiel beim Parsen einer Nachricht aus einem IMAP-Postfach, dessen Teil mit Content-Transfer-Encoding: quoted-printable markiert ist. Es ist das Gegenstück zu quoted_printable_encode(), das Sie aufrufen, bevor Sie solche Inhalte senden.
Einige Dinge sind dabei zu beachten:
- Es ändert den Zeichensatz nicht. Das Dekodieren von
=C3=A8liefert die rohen UTF-8-Bytes fürè; das Ergebnis ist nur korrekt, wenn Sie die Ausgabe als UTF-8 behandeln. Die Funktion weiß nichts über Zeichenkodierungen — sie kehrt lediglich die Hex-Maskierung um. - Kodierte Wort-Header sind anders. Betreffzeilen wie
=?UTF-8?Q?...?=verwenden ein verwandtes, aber eigenständiges Format; dekodieren Sie diese stattdessen mitmb_decode_mimeheader()odericonv_mime_decode(). - Ungültige Eingaben werden toleriert. Ein einzelnes
=, dem kein gültiges Hex folgt, wird unverändert belassen, sodass fehlerhafte Daten keinen Fehler auslösen.
Verwandte Funktionen
quoted_printable_encode()— das kodierende Gegenstück.mail()— E-Mails aus PHP senden.utf8_encode()— ISO-8859-1-Text in UTF-8 umwandeln.- PHP Strings — Übersicht über die String-Verarbeitung in PHP.