phpbar.de logo

Mailinglisten-Archive

[php] ISO_8859_Q_decode() ?

[php] ISO_8859_Q_decode() ?

Hartmut Holzgraefe hartmut_(at)_six.de
Thu, 29 Jun 2000 11:18:01 +0200


Laura Reising wrote:
> Gegeben sei der String:
> "=?iso-8859-1?Q?M=FC=DFiggang?= ist aller Laster Anfang"
 
eMail-Header erlauben nur 7bit-ASCII-Zeichen, deshalb müssen z.B.
deutsche Umlaute irgendwie 'verpackt' werden.

wie das zu geschehen hat definiert RFC2047

Kurzfassung: Wörter mit Sonderzeichen werden gekapselt in einem
 String, der mit '=?' beginnt und mit '?=' endet, dazwischen stehen
 3 durch '?' getrennte Felder
 diese enthalten:
 - den verwendeten Zeichensatz, hier iso-8859-1 bzw. Latin1
 - die Codierung: 'B' für binär, 'Q' für 'quoted printable'
   empfohlen wird die Benutzung der Variante, die das kürzere
   Ergebnis liefert, praktisch hat 'B' aber im europäisch-
   amerikanischen Sprachraum keine Bedeutung (anders sieht das
   z.B. in Asien aus)
 - den eigentlichen codierten text

> Ich möchte (welch Wunder!):
> "Müßiggang ist aller Laster Anfang"
> daraus machen.
 
> Gibt es eine Art Funktion ISO_8859_Q_decode() ?

es gibt zum einen imap_mime_header_decode() in den imap extensions
diese Funktion sollte mit allen Zeichensätzen, nicht nur mit ISO-8859
klarkommen
(verfügbar in PHP4 und im PHP3 snapshot, allerdings nicht in 3.0.16)

> Oder hat jemand schonmal sowas gebastelt (will keinen Code klauen -
> vielleicht nur Anregungen) ?

oder Q&D, aber normalerweise ausreichend:

function rfc2047_decode($text)
{ 
  $text = str_replace("_"," ",$text);
  return 
    quoted_printable_decode(
      ereg_replace("=\?iso-8859-[1234567890]*\?Q\?([^\?]*)\?=","\\1"
                  ,$text));
}






--
Hartmut Holzgraefe         hartmut_(at)_six.de           http://www.six.de


php::bar PHP Wiki   -   Listenarchive