PHP PHP Mail - Umlaute werden falsch angezeigt

  • Ersteller Ersteller Narox
  • Erstellt am Erstellt am
N

Narox

Gast
Guten Abend

Ich habe ein PHP Formular und das Problem, dass Umlaute nicht korrekt dargestellt werden. Habe recherchiert und es wird eigentlich immer gesagt, dass man als Codierung utf-8 angeben soll und außerdem darauf achten, dass die Datei als utf-8 abgespeichert ist. Letzteres habe ich über Notepad++ getestet. Habe dann auch kurz die Kodierung auf ANSI und wieder zurück auf utf-8 geändert.

Alles ohne Erfolg, die E-Mail die ich erhalte (auch ein Kumpel) sind immer falsch dargestellt.

Hier mein Code der mail.php:
PHP:
$from = "test@xxx.de";
$to = "test@xxx.de";
$subject = "Umlaut-Test;

$body = "<p>Ü ä ß das geht nicht!</p>;

$headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject, 'MIME-Version' => 1, 'Content-type' => 'text/html;charset=utf8');

try {
    $smtp = Mail::factory('smtp', array ('host' => $host, 'port' => $port, 'auth' => true, 'username' => $username, 'password' => $password));
    if (PEAR::isError($smtp)) {
        http_response_code(902);
        exit();
    }
} catch (Exception $e) {
    http_response_code(902);
    exit();
}

try {
    $mail = $smtp->send($to, $headers, $body);
    if (PEAR::isError($mail)) {
        http_response_code(903);
        exit();
    }
} catch (Exception $e) {
    http_response_code(903);
    exit();
}
 
Ist die Datei mit dem UTF-8 Charset gespeichert?

Versuch alternativ statt "text/html;charset=utf8" mal "text/html;charset=charset=iso-8859-1"
 
Ja die Datei ist als UTF-8 abgespeichert. Habe das ISO charset versucht, ohne Erfolg. Also hab neben der mail.php auch die Codierung der Javascript Datei (beinhaltet AJAX Call) jeweils geändert.

Bei dem Link hat der TE auch die Codierung in das ISO charset geändert - ging ja bei mir nicht.
 
Wenn die Mail-Datei in UTF 8 gespeichert ist, die Variablen mit php in Ansi umcodieren per utf8_decode($str)
oder per function

Code:
    function utf8ToAnsi($str){
        return     (mb_detect_encoding($str, 'UTF-8', true) ? utf8_decode($str) : $str);
    }

Charset des mailheaders sollte dann Iso sein:
Code:
"Content-type: text/html; charset=\"iso-8859-1\""
;
 
Das funktioniert, also wenn ich jede einzelne Variable mit deiner Funktion konvertiere und als Codierung ISO angebe. Finde ich zwar sehr umständlich, aber bin froh über eine Lösung - danke
 
Zurück
Oben