Start · Sprachen · PHP · Referenz · quoted_printable_encode

quoted_printable_encode

Funktion

Kodiert einen 8-Bit-String im Quoted-Printable-Format gemäß RFC 2045 für die sichere Übertragung per E-Mail.

seit PHP 5.3.0 Kategorie: string

Signatur

quoted_printable_encode(string $string): string

Beschreibung

quoted_printable_encode() wandelt einen beliebigen 8-Bit-String in das Quoted-Printable-Format um. Dabei werden alle Zeichen außerhalb des druckbaren ASCII-Bereichs (sowie bestimmte Sonderzeichen) durch ein Gleichheitszeichen (=) gefolgt von zwei hexadezimalen Ziffern ersetzt, z. B. wird ein Umlaut wie ä (UTF-8: 0xC3 0xA4) zu =C3=A4.

Das Quoted-Printable-Format ist primär für E-Mail-Inhalte gedacht, die per SMTP übertragen werden. Da SMTP-Server ursprünglich nur 7-Bit-ASCII zuverlässig transportieren konnten, ermöglicht diese Kodierung die Übermittlung von Inhalten mit Umlauten, Sonderzeichen oder binären Daten. Im Gegensatz zu Base64 bleibt lesbarer ASCII-Text weitgehend im Klartext erhalten, was die Lesbarkeit in einfachen Mail-Clients verbessert.

Die Funktion ist das Gegenstück zu quoted_printable_decode(). Lange Zeilen werden automatisch auf maximal 76 Zeichen umgebrochen, wobei ein Soft-Line-Break (=\r\n) eingefügt wird, wie es RFC 2045 vorschreibt.

Typische Anwendungsfälle sind das Kodieren von E-Mail-Headern und -Bodys in PHP-Mailer-Bibliotheken oder das manuelle Erstellen von MIME-konformen Nachrichten.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der zu kodierende 8-Bit-String. Kann beliebige Bytes enthalten, also auch UTF-8-Text mit Umlauten oder binäre Daten.

Rückgabewert

Typ
string
Beschreibung
Den kodierten String im Quoted-Printable-Format. ASCII-druckbare Zeichen (außer =) bleiben unverändert, alle anderen Bytes werden als =XX dargestellt. Zeilen werden automatisch auf 76 Zeichen mit Soft-Line-Breaks (=\r\n) begrenzt.

Beispiele

Einfachen deutschen Text kodieren

<?php
$text = 'Hallo Welt! Ä, Ö und Ü sind Umlaute.';
$encoded = quoted_printable_encode($text);
echo $encoded;
Hallo Welt! =C3=84, =C3=96 und =C3=9C sind Umlaute.

E-Mail-Body für SMTP vorbereiten

<?php
$body = "Sehr geehrte Damen und Herren,\n\nvielen Dank für Ihre Nachricht.\nMit freundlichen Grüßen,\nMax Müller";

$encodedBody = quoted_printable_encode($body);

$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
$headers .= "Content-Transfer-Encoding: quoted-printable\r\n";

echo "Headers:\n" . $headers . "\n";
echo "Body (kodiert):\n" . $encodedBody;
Headers: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Body (kodiert): Sehr geehrte Damen und Herren, vielen Dank f=C3=BCr Ihre Nachricht. Mit freundlichen Gr=C3=BC=C3=9Fen, Max M=C3=BCller

Hin- und Rückkodierung prüfen

<?php
$original = 'PHP ist großartig! Preis: 19,99 €';
$encoded  = quoted_printable_encode($original);
$decoded  = quoted_printable_decode($encoded);

echo 'Original: ' . $original . "\n";
echo 'Kodiert:  ' . $encoded  . "\n";
echo 'Dekodiert: ' . $decoded  . "\n";
echo 'Identisch: ' . ($original === $decoded ? 'Ja' : 'Nein') . "\n";
Original: PHP ist großartig! Preis: 19,99 € Kodiert: PHP ist gro=C3=9Fartig! Preis: 19,99 =E2=82=AC Dekodiert: PHP ist großartig! Preis: 19,99 € Identisch: Ja

// Wichtig · Fallstricke

Zeilenumbrüche: Die Funktion erwartet und erzeugt CRLF-Zeilenenden (\r\n) gemäß RFC 2045. Bei reinen LF-Eingaben (\n) können die Zeilenenden im kodierten Ergebnis abweichen. Prüfe dies beim Einsatz in plattformübergreifenden Anwendungen.

Nicht für URLs geeignet: Quoted-Printable ist kein URL-Encoding. Verwende für URLs stattdessen urlencode() oder rawurlencode().

Leerzeichen am Zeilenende: Leerzeichen und Tabulatoren am Ende einer Zeile werden ebenfalls kodiert (=20 bzw. =09), da RFC 2045 dies zum Schutz vor Mail-Servern vorschreibt, die solche Whitespace-Zeichen entfernen könnten.