Formular - mail() - Sonderzeichen

Hallo!

Ich kämpfe derzeit mit einem Problem, das ich alleine nicht lösen kann. Ich habe eine mehrsprachige Webseite mit einem Anfrageformular. Wenn ein user dies ausfüllt, wird eine Email mit den Daten geschickt.

Das Problem: Sonderzeichen werden in der gesendeten email - manchmal - zerschossen, und zwar sowohl Umlaute (äöüÄÖÜß) als auch z.b. polnische Sonderzeichen (Ł). So wird dann aus „späm“ ein „späm“ usw…

Ich hab versucht, eine einheitliche Codierung zu finden, zuerst hab ichs mit ISO-8859-1 versucht, danach utf-8, aber beides mal tritt ein merkwürdiges Problem auf: wenn ich das Formular ausfülle, kommt die mail bei mir korrekt an. Umlaute und Sonderzeichen werden einwandfrei angezeigt. Sobald ich das Formular dann aber verfügbar mache, flattern die emails mit zerschossenen Sonderzeichen in mein Postfach. Es macht also offenbar einen Unterschied, wer das Formular ausfüllt und das kann ich mir momentan noch gar nicht erklären. Hab überlegt ob es am Browser liegt und mit IE und Firefox getestet - kam beides mal korrekt an. Gibt es Browsereinstellugnen, die diesen Unterschied ausmachen können? Oder hat sonst jemand einen guten Tipp für mich, wie dieses Problem zustande kommen könnte?

Danke im Voraus,
Chi

Hi

Einmal gibt es Browsereinstellungen die sollten aber bei den meisten Usern mitlerweile auf utf-8 lauten.

Dann gibt es Webservereinstellungen die manchmal, gerade noch auf ISO lauten.

Auch Emails muß man sagen das sie auf UTF-8 lauten sollen.

Weiterhin sind verschiedene php Funktionen noch immer standard auf iso code denen muß man dann, wenn es bei den Funktionen möglich ist sagen das sie UTF-8 machen sollen. So z.B. htmlspecialchars diese Funktion läuft standard auf iso … gibst du also utf-8 code rein in die funktion bekommst du ISO zurück, außer du sagst der Funktion das sie UTF-8 machen soll. Das ist ein zusätzlicher Parameter.

Das sind erstmal die meisten Fehler bei der Codierung.

Schau mal ob da irgendwas von zu trifft. Wenn nicht … wieder hier melden :smile:

Gruß lamer

Hallo,

auch z.b. polnische Sonderzeichen (Ł). So wird dann aus „späm“
ein „späm“ usw…

Sieht aus, als kommen dann die Daten vom Formular in utf-8 bei PHP an, werden dann aber vom E-Mail Client nicht als utf-8, sondern als iso-8859-1 angezeigt. D.h. der Zeichensatz des Mailclients ist nicht auf utf-8 eingestellt.
Setzt du bei den Mails den Content-Type - Header, also z.B.
Content-Type: text/plain; charset=utf-8 ?

Ich hab versucht, eine einheitliche Codierung zu finden,
zuerst hab ichs mit ISO-8859-1 versucht, danach utf-8, aber
beides mal tritt ein merkwürdiges Problem auf: wenn ich das
Formular ausfülle, kommt die mail bei mir korrekt an. Umlaute
und Sonderzeichen werden einwandfrei angezeigt. Sobald ich das
Formular dann aber verfügbar mache, flattern die emails mit
zerschossenen Sonderzeichen in mein Postfach. Es macht also

Setzt du für die Webseite den Charset per Content-Type Header oder Meta-Tag auf den Gleichen, den du im Mailheader vorgibst ? Die Formulardaten werden im Zeichensatz der Webseite gesendet, ggfs. kann man beim Formular auch mit accept-charset=„utf-8“ im -Tag noch nachhelfen. Setzt du den Zeichensatz nirgends, nimmt sich der Browser den, der gerade eingestellt ist oder versucht den selbst zu erraten.

Alex

Erstmal danke für die Antwort

Sieht aus, als kommen dann die Daten vom Formular in utf-8 bei
PHP an, werden dann aber vom E-Mail Client nicht als utf-8,
sondern als iso-8859-1 angezeigt. D.h. der Zeichensatz des
Mailclients ist nicht auf utf-8 eingestellt.
Setzt du bei den Mails den Content-Type - Header, also z.B.
Content-Type: text/plain; charset=utf-8 ?

Ja, hab den Header auf utf-8

Setzt du für die Webseite den Charset per Content-Type Header
oder Meta-Tag auf den Gleichen, den du im Mailheader vorgibst
? Die Formulardaten werden im Zeichensatz der Webseite
gesendet, ggfs. kann man beim Formular auch mit
accept-charset=„utf-8“ im -Tag noch nachhelfen. Setzt du
den Zeichensatz nirgends, nimmt sich der Browser den, der
gerade eingestellt ist oder versucht den selbst zu erraten.

Die Seite mit dem Formular steht auf utf-8 (also im Meta Tag steht charset utf-8), zusätzlich hab ich beim Formular ein accept-charset=utf-8 drin.

Gibts noch ne andere Möglichkeit bzw. Fehlerquelle? Funktionen a la htmlentities etc. hab ich auch keine drin, die Daten werden direkt in einen String $message gepackt und dann per email verschickt.

Danke,
Chi

Die Seite mit dem Formular steht auf utf-8 (also im Meta Tag
steht charset utf-8), zusätzlich hab ich beim Formular ein

Setzt der Server das zusätzlich im Header (Apache: AddDefaultCharset), überschreibt diese Angabe das Meta Tag. Header ist also sicherer. Das wäre noch eine Fehlerquelle, falls da dann was anderes steht.