marc12: Umlaute in mail-Subject frisst Leerzeichen

Hey,

ich habe ein Problem mit meiner mail-Funktion: Wenn ich Leerzeichen im Subject habe, dann passiert folgendes

blää blää bla

wird zu

blääblää bla

Das kann ich nur verhindern, wenn ich zwischen die Umlaut-Wörter ein _ mache. Das wird dann irgendwie als Leerzeichen angezeigt. Sieht das aber so aus:

bla bla bla

und ich mache da ein Unterstrich zwischenrein, dann kommt im Mailprogramm das an:

bla_bla bla

Wie kann ich das richten?

UTF-8 Kodiert ist das alles.

Viele Grüße
marc12

  1. Moin!

    Wie kann ich das richten?

    UTF-8 Kodiert ist das alles.

    Aber sicher nicht korrekt, denn in Mailheaderzeilen - und "Subject" ist eine davon - sind alle Zeichen mit mehr als 7 Bit nicht uncodiert erlaubt, und UTF-8 hat reichlich von diesen unerlaubten Zeichen.

    - Sven Rautenberg

  2. Hey,
    Wie kann ich das richten?

    UTF-8 Kodiert ist das alles.

    Also wenn ich bei mir in die mail-logs schaue sind da Mails mit iso 8859-1 dabei. So fängt z.B. eine Mail an die das Wort "für" enthält:

    =?iso-8859-1?Q?_f=FCr_

    Ich kenne jetzt nicht den komplette Standard, aber die die Codierung sieht mir recht einfach aus, die müßte man leicht hinbebkommen.

    Thomas
    ___________________________________________________
    Mein Blog

    1. Hi Thomas,

      Ich kenne jetzt nicht den komplette Standard, aber die die Codierung sieht mir recht einfach aus, die müßte man leicht hinbebkommen.

      Müsste sich hierbei um RFC 2047 handeln, welches dieses Encoding regelt:

      MIME (Multipurpose Internet Mail Extensions) Part Three:
             Message Header Extensions for Non-ASCII Text

      Im Prinzip sagt das eigentlich nur aus, dass du nach =? zunächst den Charset angibst, nach einem weiteren Fragenzeichen dann das Kodierungsverfahren, wobei Q für Quoted-Printable und B für Base64 steht und zwischen dem nächsten Fragezeichen und dem beendenden ?= dann der kodierte Inhalt steht.

      Eigentlich leicht zu implementieren, zumal PHP Funktionen zum dekodieren bzw. kodieren von wohl Base64 als auch Quoted-Printable mitliefert. Es gibts aber bestimmt auch jede Menge fertige PHP-Klassen, welche das komplett für einen erledigen.

      Viele Grüße,
        ~ Dennis.

      1. echo $begrüßung;

        Es gibts aber bestimmt auch jede Menge fertige PHP-Klassen, welche das komplett für einen erledigen.

        Es gibt in der optionalen Extension Multibyte String die Funktion mb_encode_mimeheader().

        echo "$verabschiedung $name";