Sonderzeichen korrekt übertragen
kungschu
- programmiertechnik
Hallo.
Das Problem: Die eMails meines Kontaktformulars zeigen, wenn sie bei mir angekommen sind, die Zeichen ß ä ö ü nicht korrekt an, sprich irgendwie als åY oder dergleichen.
Welche Möglichkeiten habe ich, damit die Zeichen korrekt ausgegeben werden?
Wie könnte eine Lösung mit preg_replace aussehen? Die Beschreibung ist mir nicht ganz klar:
Ich weiß nicht, wie die Funktion aussehen müsste, wenn ich die Zeichen etwa durch ss ae oe ue ersetzen lassen wollte. D.h., wie ich mehrere Zeichen durch mehrere andere Zeihen ersetze, bzw. ich Zeichen in der Funktion trenne.?
$text = preg_replace("ß,ä,ö,ü","ss,ae,oe,ue",$text); # ?
MfG, Kungschu.
Hallo kungschu,
Das Problem: Die eMails meines Kontaktformulars zeigen, wenn sie bei mir angekommen sind, die Zeichen ß ä ö ü nicht korrekt an, sprich irgendwie als åY oder dergleichen.
Welche Möglichkeiten habe ich, damit die Zeichen korrekt ausgegeben werden?
Wähle überall die gleiche Kodierung. Dann hast du hiermit keine Probleme mehr.
Grüße
Marc Reichelt || http://www.marcreichelt.de/
Hallo.
Wähle überall die gleiche Kodierung. Dann hast du hiermit keine Probleme mehr.
Meine Webseite ist vollständig in UTF-8 kodiert. Meinen E-Mail Account habe ich wei web.de. Die haben offenbar in iso-8859-1 kodiert.
Was muss ich also anders kodieren, damit die Schriftzeichen korrekt übergeben werden?
MfG, Kungschu.
Hallo kungschu,
Wähle überall die gleiche Kodierung. Dann hast du hiermit keine Probleme mehr.
Meine Webseite ist vollständig in UTF-8 kodiert. Meinen E-Mail Account habe ich wei web.de. Die haben offenbar in iso-8859-1 kodiert.
Was muss ich also anders kodieren, damit die Schriftzeichen korrekt übergeben werden?
Nein. Nicht sie haben die Kodierung so eingestellt, sondern du.
Versende deine E-Mail als UTF-8, dann wird sie vermutlich auch korrekt bei web.de ankommen. Das sollte unter anderem mit folgender zusätzlichen Zeile im Mail-Header bei Aufruf der Funktion mail() funktionieren:
Content-type: text/plain; charset=utf-8
Wichtig ist dann natürlich noch, dass die Daten auch wirklich im UTF-8-Format vorliegen. Das kann eventuell schief laufen, wenn du sie vorher durch gewisse PHP-Funktionen gejagt hast (hierfür gibt es meist einen zusätzlichen Kodierungs-Parameter).
Grüße
Marc Reichelt || http://www.marcreichelt.de/
Hallo Marc.
Herzlichen Dank für deine Hilfe.
Meine Definition des $headers sieht jetzt wie folgt aus:
$header= "Content-Type: text/plain; charset=utf-8;\n
FROM:".$_SESSION['email']."\n";
Nun werden die Schriftzeichen (ß ä ö ü) korrrekt angezeigt, allerdings wird die eMail Adresse nicht mehr dem HEADER übergeben, sondern steht in der ersten Zeile der eMail. Absender ist nun der apache@meineSeite.de, was so nicht sein soll.
Wo liegt der Fehler? Wieso wird nur die erste HEADER-Zeile als solche übergeben?
Danke.
MfG, Kungschu.
Hallo,
$header= "Content-Type: text/plain; charset=utf-8;\n
FROM:".$_SESSION['email']."\n";
Nun werden die Schriftzeichen (ß ä ö ü) korrrekt angezeigt, allerdings wird die eMail Adresse nicht mehr dem HEADER übergeben, sondern steht in der ersten Zeile der eMail.
richtig, weil zwei(!) aufeinanderfolgende Zeilenumbrüche in einer Mailnachricht das Ende des Headerbereichs bzw. den Beginn des Nachrichtenrumpfs markieren.
Und du *hast* in deinem Codeauszug zwei Zeilenumbrüche: Einer wird durch das \n dargestellt, und der zweite durch die neue Zeile im Quellcode.
Übrigens legt RFC 2822 fest, dass der Zeilenumbruch mit der Kombination CR+LF, also \r\n dargestellt wird. Die meisten MTAs akzeptieren zwar auch ein einfaches Linefeed, aber verlassen darf man sich nicht darauf.
Außerdem wird "From" üblicherweise bis auf den Anfangsbuchstaben klein geschrieben, und nach dem Doppelpunkt muss erst ein Leerzeichen folgen.
So long,
Martin
Hallo Martin.
Danke dir.
Lösung:
$header= "From: ".$_SESSION['email']."\r\nContent-Type: text/plain; charset=utf-8;\r\n";
MfG, Kungschu.
Hallo.
Jetzt habe ich noch ein anderes Problem:
Ich möchte die (HTML-)Zeilenumbrüche mittels preg_replace wieder umwandeln, um danach auch eine schön formatierte E-Mail zu erhalten und keine Satzwurst.
Das habe ich, wie folgt, versucht:
$_SESSION['nachricht'] = preg_replace("/<br \/>/im","\r\n", $_SESSION['nachricht']);
Allerdings geschieht (zumindest scheinbar) nichts.
Steckt ein Fehler in der Zeile?
(Anmerkung: mit \ wollte ich / "neutralisieren (um <br /> zu ersetzen); ich weiß aber, mangels Kenntnissen, nicht, ob das so korrekt ist.
MfG, Kungschu.
hi,
Ich möchte die (HTML-)Zeilenumbrüche mittels preg_replace wieder umwandeln, um danach auch eine schön formatierte E-Mail zu erhalten und keine Satzwurst.
Das habe ich, wie folgt, versucht:
$_SESSION['nachricht'] = preg_replace("/<br />/im","\r\n", $_SESSION['nachricht']);
Wieso stehen denn überhaupt schon HTML-Umbrüche in der Nachricht drin?
gruß,
wahsaga
--
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }
Hallo wahsaga.
Weil ich die $_SESSION['nachricht']
einen Schritt vorher als "Vorschau" ausgebe.
Wie mach eich das Ganze nun aber wieder "rückgängig"?
MfG, Kungschu.
hi,
Weil ich die
$_SESSION['nachricht']
einen Schritt vorher als "Vorschau" ausgebe.
Wie mach eich das Ganze nun aber wieder "rückgängig"?
Gar nicht. Verändere die Daten gar nicht erst. Belasse Daten immer in "Rohform".
Wenn du sie für eine Vorschau mit HTML-Zeilenumbrüchen ausgeben willst, dann wendest du halt zu dem Zeitpunkt nl2br darauf an, wo du sie ausgibst.
gruß,
wahsaga
Hallo wahsaga.
Danke dir für deinen Beitrag.
Wenn du sie für eine Vorschau mit HTML-Zeilenumbrüchen ausgeben willst, dann wendest du halt zu dem Zeitpunkt nl2br darauf an, wo du sie ausgibst.
Das Poblem war, dass ich die Daten vor dem Versenden nochmals mit:
$_SESSION['nachricht'] = preg_replace("/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im", "", $_SESSION['nachricht']);
gefiltert habe. Kann ich darauf verzichten? (Die Daten werden vor der ersten Ausgabe bereits mit strip_tags(), htmlspecialchars(), trim() und stripslashes() "durch die Mangel genommen".)
Oder sollte ich für $_SESSION['nachricht']
nochmal eine etwas großzügigere Filterung mittles preg_replace einbauen?
MfG, Kungschu.