Ralf: Zeichencodierung im newsletter nur teilweise korrrekt

Gumo!

Mein php-newsletter-script macht mir bei der Zeichencodierung Ärger:

Umlaute etc. werden im Nachrichteninhalt korrekt dargestellt, also ä,ö,ü sind vorhanden. In der email-Betreffszeile jedoch werden diese verhauen und aus einem für wird ein f�r

Mein email-header-Aufbau sieht so aus:
$header  = "MIME-Version: 1.0\r\n";
$header .= "Content-type: text/html; charset=iso-8859-1\r\n";
$header .= "From: $absender\r\n";
$header .= "Reply-To: $antwortan\r\n";
$header .= "X-Mailer: PHP ". phpversion();

und mein html-header so:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

Fehlen zusätzliche Angaben? Warum ist die Zeichencodierung im Inhalt korrekt und im Betreff nicht?

  1. Hi!

    $header .= "Content-type: text/html; charset=iso-8859-1\r\n";
    Fehlen zusätzliche Angaben? Warum ist die Zeichencodierung im Inhalt korrekt und im Betreff nicht?

    Die Zeile heißt Content-Type und nicht Header-Type. Für den Header ist eine eigene Art der Kodierung notwendig. Bitte suche nach Email Subject Kodierung oder Email Umlaut Betreff, die Antwort steht bereits im Netz, du bist nicht der erste mit dem Problem.

    Lo!

    1. Danke!

      Der Begriff "Email Subject Kodierung" hat mich drauf gebracht den Betreff-String mittels mb_encode_mimeheader in das richtige Zeichenformat zu bringen!

  2. Hallo,

    Mein php-newsletter-script macht mir bei der Zeichencodierung Ärger:
    Umlaute etc. werden im Nachrichteninhalt korrekt dargestellt, also ä,ö,ü sind vorhanden. In der email-Betreffszeile jedoch werden diese verhauen und aus einem für wird ein f�r

    welche Codierungen werden denn *tatsächlich* verwendet?

    $header .= "Content-type: text/html; charset=iso-8859-1\r\n";
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

    Das ist schon okay, ist aber nur das, was auf der Verpackung draufsteht. Was ist wirklich drin?
    Die Art, wie zum Beispiel das 'ü' verstümmelt ist, lässt mich vermuten, dass irgendwo in der Verarbeitungskette in Wirklichkeit UTF-8 verwendet wird. Warum eigentlich nicht durchgehend?

    $header  = "MIME-Version: 1.0\r\n";
    $header .= "Content-type: text/html; charset=iso-8859-1\r\n";
    $header .= "From: $absender\r\n";
    $header .= "Reply-To: $antwortan\r\n";
    $header .= "X-Mailer: PHP ". phpversion();

    Ich hoffe, du hast dafür gesorgt, dass Benutzereingaben hier nicht ungeprüft in Headerzeilen wandern.

    Warum ist die Zeichencodierung im Inhalt korrekt und im Betreff nicht?

    Headerzeilen, die Nicht-ASCII-Zeichen enthalten, müssen zusätzlich zur gewählten Zeichencodierung (ISO-8859-1 oder UTF-8) noch mit einer Transportcodierung versehen werden - entweder Quoted-Printable (bevorzugt) oder base64. Die PHP-Funktion mb_encode_mimeheaders() hilft dir dabei. Mein Gefühl sagt mir aber, dass das nur ein Nebenschauplatz ist und dein eigentliches Problem ein unbewusster Wechsel der Zeichencodierungen ist.
    Um das eindeutig feststellen zu können, bräuchte man ein online-Beispiel und den relevanten Quellcodeauszug.

    So long,
     Martin

    --
    Irgendwann in grauer Vorzeit benutzte einer unserer prähistorischen Vorfahren ein Schimpfwort anstelle der Keule.
    Die Zivilisation hatte begonnen.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(