Start · Sprachen · PHP · Referenz · quoted_printable_decode

quoted_printable_decode

Funktion

Dekodiert einen <code>Quoted-Printable</code>-kodierten String in einen 8-Bit-String.

seit PHP 5.3.0 Kategorie: string

Signatur

quoted_printable_decode(string $string): string

Beschreibung

quoted_printable_decode() wandelt einen nach dem Quoted-Printable-Verfahren (RFC 2045) kodierten String zurück in seinen ursprünglichen 8-Bit-Binärstring. Quoted-Printable ist eine Kodierung, bei der alle Bytes außer druckbaren ASCII-Zeichen als =XX (Hexadezimal) dargestellt werden, um die sichere Übertragung über Protokolle zu gewährleisten, die nur 7-Bit-ASCII unterstützen (z. B. ältere E-Mail-Systeme).

Diese Funktion ist besonders nützlich beim Verarbeiten von empfangenen E-Mails, deren Header oder Body im Quoted-Printable-Format vorliegen. Zusammen mit quoted_printable_encode() bildet sie ein vollständiges Werkzeug für die Verarbeitung solcher Inhalte.

Zeilenumbrüche werden gemäß RFC 2045 behandelt: Ein = am Ende einer Zeile (sogenannter Soft Line Break) wird entfernt und die Zeile logisch zusammengefügt. Reguläre CRLF-Zeilenenden (=0D=0A) werden korrekt dekodiert.

Im Unterschied zu imap_qprint() erfordert diese Funktion keine IMAP-Erweiterung und ist daher in jeder PHP-Installation einsetzbar.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der Quoted-Printable-kodierte Eingabe-String, der dekodiert werden soll.

Rückgabewert

Typ
string
Beschreibung
Gibt den dekodierten 8-Bit-String zurück. Bei einem leeren Eingabe-String wird ein leerer String zurückgegeben.

Beispiele

Einfaches Dekodieren eines Quoted-Printable-Strings

<?php
$encoded = 'Sch=C3=B6nes Wetter heute!';
$decoded = quoted_printable_decode($encoded);
echo $decoded;
// Ausgabe: Schönes Wetter heute!
Schönes Wetter heute!

Dekodieren eines E-Mail-Bodys mit Soft Line Breaks

<?php
// E-Mail-Body mit Quoted-Printable-Kodierung und Soft Line Break (= am Zeilenende)
$encoded = "Dies ist ein langer Text, der =\r\n"
         . "umgebrochen wurde.\r\n"
         . "Und hier kommen Umlaute: =C3=A4, =C3=B6, =C3=BC.";

$decoded = quoted_printable_decode($encoded);
echo $decoded;
Dies ist ein langer Text, der umgebrochen wurde. Und hier kommen Umlaute: ä, ö, ü.

Roundtrip: Kodieren und Dekodieren

<?php
$original = 'PHP ist großartig! Ä, Ö, Ü und ß funktionieren.';
$encoded  = quoted_printable_encode($original);
$decoded  = quoted_printable_decode($encoded);

var_dump($original === $decoded);
echo 'Kodiert: ' . $encoded . PHP_EOL;
echo 'Dekodiert: ' . $decoded . PHP_EOL;
bool(true) Kodiert: PHP ist gro=C3=9Fartig! =C3=84, =C3=96, =C3=9C und =C3=9F funktionieren. Dekodiert: PHP ist großartig! Ä, Ö, Ü und ß funktionieren.

// Wichtig · Fallstricke

Zeichenkodierung: Die Funktion dekodiert rein auf Byte-Ebene und ist kodierungsunabhängig. Wenn der ursprüngliche Text UTF-8 war, liefert sie nach dem Dekodieren wieder einen gültigen UTF-8-String – vorausgesetzt, der kodierte String enthält korrekte UTF-8-Sequenzen.

Unterschied zu imap_qprint(): imap_qprint() ist funktional ähnlich, erfordert jedoch die aktivierte IMAP-PHP-Erweiterung. quoted_printable_decode() hat keine solche Abhängigkeit und ist daher zu bevorzugen.

Ungültige Eingaben: Ungültige Quoted-Printable-Sequenzen (z. B. =ZZ) werden nicht als Fehler behandelt, sondern in der Regel unverändert übernommen. Eine Validierung der Eingabe sollte daher bei unsicheren Quellen vorher erfolgen.