E-Mail setzt die Umlaute falsch um.
Phil Z.
- php
0 Powl0 Phil Z.
0 Mathias Brodala0 Powl
Hallo.
Im moment verschicke ich meine E-Mails so:
$von=$_POST['von'];
$betreff=$_POST['betreff'];
$text=$_POST['text'];
$xtra="From: $von \r\n";
$xtra.= 'MIME-Version: 1.0' . "\r\n";
$xtra.= 'Content-type: text/html; charset=uft-8' . "\r\n";
$an="email@mail.de";
mail($an,$betreff,$text,$xtra);
Nur Leider werden die Umlaute nicht umgesetzt. Aus Ö wird Ã�.
Wie kann ich das ändern?
mfg
Phil Z.
Hallo,
$xtra.= 'Content-type: text/html; charset=uft-8' . "\r\n";
^^^
Ist das ein Typo hier, oder auch im Skript? Wäre UTF-8 nicht richtiger?
netten Tag
^da Powl
Hab ich geändert!
Aber bringt leider nichts.
Meine Mail kommt so an:
Content-type: text/html; charset=UTF-8
Message-Id: 20061104163712.6B4B5FC629@mx1.mkq.de
Date: Sat, 4 Nov 2006 17:37:12 +0100 (CET)
T�ST.?!
Abgeschickt hatte ich: TÖST.?!
Hallo Phil.
Im moment verschicke ich meine E-Mails so:
$von=$_POST['von'];
$betreff=$_POST['betreff'];
$text=$_POST['text'];
Wozu diese Umspeicherung? Verwende doch die Schlüssel von $_POST direkt.
$xtra="From: $von \r\n";
$xtra.= 'MIME-Version: 1.0' . "\r\n";
$xtra.= 'Content-type: text/html; charset=uft-8' . "\r\n";$an="email@mail.de";
mail($an,$betreff,$text,$xtra);
Nur Leider werden die Umlaute nicht umgesetzt. Aus Ö wird Ã�.
Überaus merkwürdig, denn „
“ wäre ein zwar in UTF-8 kodiertes aber nicht dieserart interpretiertes „Ö“. Das Ersatzzeichen (�) dagegen wird in diesem Zusammenhang normalerweise dann dargestellt, wenn eine bestimmte Bytefolge in UTF-8 keinem gültigen Zeichen zugeordnet werden kann. (Z. B. also wenn als ISO-8859-1 gesicherte Texte als UTF-8 interpretiert werden.)
Es scheint also, als würden hier zwei Kodierungen vermischt, wobei keine von beiden die richtige ist.
Was ergibt bei dir folgendes, wenn du „TÖST“ übergibst?
$arr_chars = [link:http://de2.php.net/manual/en/function.str-split.php@title=str_split]($_POST['text']); // Zeichenkette aufsplitten
foreach($arr_chars as $str_char) {
echo [link:http://de2.php.net/manual/en/function.ord.php@title=ord]($str_char), ' '; // Numerische Repräsentation der Zeichen ausgeben
}
In meiner UTF-8-orienterten Umgebung ergibt dies beispielsweise folgendes:
84 195 150 83 84
(T Ö S T)
Hast du bei deinem Formular explizit UTF-8 für das http://de.selfhtml.org/html/referenz/attribute.htm#form@title=accept-charset-Attribut festgelegt?
Einen schönen Samstag noch.
Gruß, Mathias
Moin!
$von=$_POST['von'];
$betreff=$_POST['betreff'];
$text=$_POST['text'];Wozu diese Umspeicherung? Verwende doch die Schlüssel von $_POST direkt.
Damit man nicht mehr so einfach nachvollziehen kann, wenn gefährliche Userdaten ohne Escaping in gefährlichen Aktionen benutzt werden.
Sozusagen der Freifahrtschein zum "Selbst in den Fuß schießen"!
$xtra="From: $von \r\n";
Mit anderen Worten:
$xtra = "From: $_POST[von] \r\n";
Und wenn in $_POST nun Zeilenumbrüche und weitere Mailheader drin stehen, z.B. BCC oder CC, dann hat man eine Spamschleuder gebaut.
Nur: Das unscheinbare Verwenden von $von tarnt solche Tatsachen ganz prima.
Deshalb: Das simple Kopieren von Daten aus $_GET, $_POST, $_COOKIE etc. GEHÖRT VERBOTEN!
- Sven Rautenberg
Hallo,
$von=$_POST['von'];
$betreff=$_POST['betreff'];
$text=$_POST['text'];$xtra="From: $von \r\n";
$xtra.= 'MIME-Version: 1.0' . "\r\n";
$xtra.= 'Content-type: text/html; charset=UTF-8' . "\r\n";
?? $xtra.= "Content-Transfer-Encoding: 8bit";
Ich bin mir echt nicht sicher, frage eher selbst denn ich antworte.
Ich verschicke Mails normal mit ISO-8859-1, (wieso auch nicht?)
Aber mit der fehlenden Angabe zum Content-Transfer-Encoding wird das nichts zu tun haben, oder?
netten Tag
^da Powl