Mailfunktion gibt Zeichen für Zeilenumbrüche in textarea aus
Mitchell (Level 2) - Jetzt verbinden
08.10.2011, aktualisiert 14.01.2012, 9394 Aufrufe, 19 Kommentare
Hi,
ich habe jetzt diverse Foren durch und alles ausprobiert, was Google mir ausgespuckt hat bzw. mir in den Sinn kam. Ich komme nicht weiter, vielleicht könnt ihr mir helfen.
Vor mir liegt ein Formular, mit welchem ich per "mail" die Daten, die per POST übermittelt werden, an mich schicke. Nun habe ich im Script selber die Input-Felder durch "\r\n" mit einem Abstand versehen, dies kommt auch in der E-Mail so an. Also
Vorname
Nachname
usw.
Ganz unten gibt es eine textarea ($text), sobald der User hier was einträgt, bekomme ich in meiner E-Mail diese als "\r\n" angezeigt. Versucht habe ich schon folgendes:
- header komplett weggelassen (außer natürlich dem Absender)
- header Content-Type auf plain bzw. html gesetzt, bei beiden mal folgendes getestet:
(letzteres ein Verzweiflungsakt *g*)
- header Content-Type auf utf-8 und ISO-8859-1 gesetzt (aktuell wieder utf-8)
- in der textarea ein "nl2br" eingefügt (auch Verzweiflungsakt)
und zuletzt nochmal - aus Verzweiflung - den Text der textarea htmltauglich gemacht
Ich weiß nicht mehr, was ich noch tun soll. Sehr kurios finde ich auch die Tatsache, dass genau das selbe Script (außer dem header) auf anderen Servern ohne Probleme funktioniert. Über den Server kann ich euch noch nichts sagen, aber ich gehe mal von Debian aus. EDIT: Server OS ist Debian.
Hat jemand eine Idee?
Mfg
Mitchell
ich habe jetzt diverse Foren durch und alles ausprobiert, was Google mir ausgespuckt hat bzw. mir in den Sinn kam. Ich komme nicht weiter, vielleicht könnt ihr mir helfen.
Vor mir liegt ein Formular, mit welchem ich per "mail" die Daten, die per POST übermittelt werden, an mich schicke. Nun habe ich im Script selber die Input-Felder durch "\r\n" mit einem Abstand versehen, dies kommt auch in der E-Mail so an. Also
Vorname
Nachname
usw.
Ganz unten gibt es eine textarea ($text), sobald der User hier was einträgt, bekomme ich in meiner E-Mail diese als "\r\n" angezeigt. Versucht habe ich schon folgendes:
- header komplett weggelassen (außer natürlich dem Absender)
- header Content-Type auf plain bzw. html gesetzt, bei beiden mal folgendes getestet:
str_replace("\r\n", "", $text)
str_replace("\r\n", "\r", $text)
str_replace("\r\n", "\n", $text)
str_replace("\r\n", "\n\n", $text)
str_replace("\r\n", "<br>", $text)
str_replace("<br>", "\r\n", $text)
(letzteres ein Verzweiflungsakt *g*)
- header Content-Type auf utf-8 und ISO-8859-1 gesetzt (aktuell wieder utf-8)
- in der textarea ein "nl2br" eingefügt (auch Verzweiflungsakt)
und zuletzt nochmal - aus Verzweiflung - den Text der textarea htmltauglich gemacht
nl2br($text)
htmlentities($text)
Hat jemand eine Idee?
Mfg
Mitchell
19 Antworten
- LÖSUNG dog schreibt am 08.10.2011 um 18:17:48 Uhr
- LÖSUNG Mitchell schreibt am 08.10.2011 um 21:57:47 Uhr
- LÖSUNG dog schreibt am 08.10.2011 um 22:02:17 Uhr
- LÖSUNG Mitchell schreibt am 09.10.2011 um 13:56:21 Uhr
- LÖSUNG Arano schreibt am 09.10.2011 um 14:51:53 Uhr
- LÖSUNG Mitchell schreibt am 09.10.2011 um 15:28:11 Uhr
- LÖSUNG Arano schreibt am 09.10.2011 um 15:46:28 Uhr
- LÖSUNG Mitchell schreibt am 09.10.2011 um 16:38:55 Uhr
- LÖSUNG dog schreibt am 09.10.2011 um 16:51:12 Uhr
- LÖSUNG Mitchell schreibt am 09.10.2011 um 22:19:52 Uhr
- LÖSUNG Mitchell schreibt am 10.10.2011 um 00:47:05 Uhr
- LÖSUNG dog schreibt am 10.10.2011 um 01:02:43 Uhr
- LÖSUNG Mitchell schreibt am 10.10.2011 um 16:11:19 Uhr
- LÖSUNG dog schreibt am 10.10.2011 um 17:43:41 Uhr
- LÖSUNG Mitchell schreibt am 10.10.2011 um 18:14:28 Uhr
- LÖSUNG dog schreibt am 10.10.2011 um 19:38:04 Uhr
- LÖSUNG Mitchell schreibt am 10.10.2011 um 20:21:24 Uhr
- LÖSUNG dog schreibt am 10.10.2011 um 20:26:52 Uhr
- LÖSUNG Mitchell schreibt am 11.10.2011 um 15:38:04 Uhr
- LÖSUNG dog schreibt am 10.10.2011 um 20:26:52 Uhr
- LÖSUNG Mitchell schreibt am 10.10.2011 um 20:21:24 Uhr
- LÖSUNG dog schreibt am 10.10.2011 um 19:38:04 Uhr
- LÖSUNG Mitchell schreibt am 10.10.2011 um 18:14:28 Uhr
- LÖSUNG dog schreibt am 10.10.2011 um 17:43:41 Uhr
- LÖSUNG Mitchell schreibt am 10.10.2011 um 16:11:19 Uhr
- LÖSUNG dog schreibt am 10.10.2011 um 01:02:43 Uhr
- LÖSUNG Mitchell schreibt am 10.10.2011 um 00:47:05 Uhr
- LÖSUNG Mitchell schreibt am 09.10.2011 um 22:19:52 Uhr
- LÖSUNG dog schreibt am 09.10.2011 um 16:51:12 Uhr
- LÖSUNG Mitchell schreibt am 09.10.2011 um 16:38:55 Uhr
- LÖSUNG Arano schreibt am 09.10.2011 um 15:46:28 Uhr
- LÖSUNG Mitchell schreibt am 09.10.2011 um 15:28:11 Uhr
- LÖSUNG Arano schreibt am 09.10.2011 um 14:51:53 Uhr
- LÖSUNG Mitchell schreibt am 09.10.2011 um 13:56:21 Uhr
- LÖSUNG dog schreibt am 08.10.2011 um 22:02:17 Uhr
- LÖSUNG Mitchell schreibt am 08.10.2011 um 21:57:47 Uhr
LÖSUNG 08.10.2011 um 18:17 Uhr
LÖSUNG 08.10.2011 um 22:02 Uhr
LÖSUNG 09.10.2011 um 13:56 Uhr
sorry, hatte ich oben vergessen. Ich hab die Variable schon mit "var_dump" und "print_r" ausgeben lassen. Der Zeilenumbruch wird mir allerdings nur ausgegeben (im Browser), wenn ich halt noch ein "nl2br" dran hänge. Wenn ich also schreibe:
bekomme ich als Antwort string(9) "i k k "
In der textarea habe ich die drei Buchstaben jeweils mit Zeilenumbruch geschrieben. Ach ja..:$text ist natürlich $_POST['text']
Mfg
Mitchell
PS: Server läuft übrigens auf Debian
var_dump($text)
In der textarea habe ich die drei Buchstaben jeweils mit Zeilenumbruch geschrieben. Ach ja..:$text ist natürlich $_POST['text']
Mfg
Mitchell
PS: Server läuft übrigens auf Debian
LÖSUNG 09.10.2011 um 14:51 Uhr
Hallo
"Normale" Zeilenumbrüche werden in/als HTML doch nicht angezeigt, bzw. nur als "Leerzeichen" - genau wie Tabulatoren oder mehrere Leerzeichen ;)
Wie fügst du das denn in die E-Mail ein (Quellcode)
Mach hier auch noch einmal ein var_dump(), von der Variable mit dem Text selber und hinterher vom E-Mail-Quellode und von der POST-Variable !
...im Quelltext schauen...
Etwa $text = $_POST['text'] oder gar register_globals = On ?
Was für ein System verwendest du ?
Bzw. Wie stellt dein System einen Zeilenumbruch dar ? (\r | \n | \r\n)
~Arano
...bekomme ich als Antwort string(9) "i k k "
Du musst dann __in den Quelltext__ der erzeugten Seite schauen !"Normale" Zeilenumbrüche werden in/als HTML doch nicht angezeigt, bzw. nur als "Leerzeichen" - genau wie Tabulatoren oder mehrere Leerzeichen ;)
Wie fügst du das denn in die E-Mail ein (Quellcode)
Mach hier auch noch einmal ein var_dump(), von der Variable mit dem Text selber und hinterher vom E-Mail-Quellode und von der POST-Variable !
...im Quelltext schauen...
Ach ja..:$text ist natürlich $_POST['text']
Was soll das heißen ?Etwa $text = $_POST['text'] oder gar register_globals = On ?
Was für ein System verwendest du ?
Bzw. Wie stellt dein System einen Zeilenumbruch dar ? (\r | \n | \r\n)
~Arano
LÖSUNG 09.10.2011 um 15:28 Uhr
Du musst dann __in den Quelltext__ der erzeugten Seite schauen !
"Normale" Zeilenumbrüche werden in/als HTML doch nicht angezeigt, bzw. nur als "Leerzeichen" - genau wie
Tabulatoren oder mehrere Leerzeichen ;)
"Normale" Zeilenumbrüche werden in/als HTML doch nicht angezeigt, bzw. nur als "Leerzeichen" - genau wie
Tabulatoren oder mehrere Leerzeichen ;)
schon klar
Wie fügst du das denn in die E-Mail ein (Quellcode)
ich schreibe den Text der textarea in die Variable und gebe es normal an die Mailfunktion weiter, also:
<textarea name="text" cols="50" rows="8" id="text"></textarea>
mail($mail, $subject, $msg, $header)
Mach hier auch noch einmal ein var_dump(), von der Variable mit dem Text selber und hinterher vom E-Mail-Quellode und von der
POST-Variable !
...im Quelltext schauen...
POST-Variable !
...im Quelltext schauen...
die Variable mit dem Text und die POST-Variable sind die gleichen...daher $text = POST['text']. Ein var_dump vom E-Mail Quellcode ergibt das selbe, wie der var_dump von $text. Außer natürlich, ich führ var_dump direkt mit der Funktion aus, also
var_dump(mail($to, $subject, $msg, $from)
Was soll das heißen ?
Etwa $text = $_POST['text'] oder gar register_globals = On ?
Etwa $text = $_POST['text'] oder gar register_globals = On ?
nein, siehe oben. Ich habe den POST Wert damit nur in eine andere Variable geschrieben ^^
Was für ein System verwendest du ?
Bzw. Wie stellt dein System einen Zeilenumbruch dar ? (\r | \n | \r\n)
Bzw. Wie stellt dein System einen Zeilenumbruch dar ? (\r | \n | \r\n)
Der Server läuft unter Debian und lt. var_dump sind die Umbrüche mit \r\n dargestellt...so zeigt es mein Outlook 2000 übrigens auch an.
Ich habe übrigens noch was probiert, klappt aber auch nicht. Egal, in welcher Weise:
str_replace("\r\n", chr(10).chr(13), $text)
Mitchelll
LÖSUNG 09.10.2011 um 15:46 Uhr
Hi Mitchell
Hehe... ich wollte wissen was für ein System DU verwendest, welches Betriebssystem hat der Computer mit dem du den Browser aufrufst. Aber da du Outlook verwendest, wird es wohl ein Windows sein.
Genau das wollte ich doch sehen, also wie setzt du die Variable $msg zusammen, den Quellcode.
und wo ich das gerade sehe, zeige gleich noch mal wie du $header zusammensetzt und was drin steht.
Edit:
Handelt es sich eigentlich um Plaintext- oder HTML-Mails ?
~Arano
Was für ein System verwendest du ?
Der Server läuft unter Debian und lt. var_dump sind die Umbrüche mit \r\n dargestellt...so zeigt es mein Outlook 2000 übrigens auch an.Wie fügst du das denn in die E-Mail ein (Quellcode)
...in $msg stehen die restlichen Variablen und natürlich dann die Variable $text.und wo ich das gerade sehe, zeige gleich noch mal wie du $header zusammensetzt und was drin steht.
Edit:
Handelt es sich eigentlich um Plaintext- oder HTML-Mails ?
~Arano
LÖSUNG 09.10.2011 um 16:38 Uhr
Hi Arano,
jep, ich verwende Windows XP
Code für die Mail + Header:
Die Mail geht als Plain raus, wie oben zu sehen ist ^^. Habs aber auch schon mit html probiert.
Mfg
Mitchell
jep, ich verwende Windows XP
Code für die Mail + Header:
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-type: text/plain; charset=utf-8\r\n";
$header .= "Content-Transfer-Encoding: quoted-printable\r\n";
$header .= "From: Bestellung|Graphic-24.de ".$_POST['email']."\r\n";
$msg = $vorname."\r\n\r\n".$nachname."\r\n\r\n".$email."\r\n\r\n".$telefon."\r\n\r\n".$wohnort."\r\n\r\n".$plz."\r\n\r\n".$adresse."\r\n\r\n".$kategorie."\r\n\r\n".$text;
Mfg
Mitchell
LÖSUNG 09.10.2011 um 16:51 Uhr
Werden denn die anderen Zeilenumbrüche in der Mail richtig dargestellt?
Thema str_replace:
Das einzige was entfernt Sinn machen würde wäre
Dann solltest du mal error_reporting anschalten und dir den Fehler angucken
$msg = $vorname."\r\n\r\n".$nachname
Thema str_replace:
Das einzige was entfernt Sinn machen würde wäre
str_replace("\\r\\n","\r\n",$text);
, dann bekomme ich ein bool(false)
Dann solltest du mal error_reporting anschalten und dir den Fehler angucken
LÖSUNG 09.10.2011 um 22:19 Uhr
Hi dog,
die andren Zeilenumbrüche werden richtig dargestellt.
Wieso macht dein Replace Sinn? Also ich glaubs dir schon, ich sehs nur nich
Der Zeilenumbruch ist doch ein "\r\n\, wieso also nochmal escapen?
Error_reporting ist an, ich bekomme so keinen Fehler. Aber ich könnt mal ins Errorlog gucken, vielleicht gibts da was ^^. Morgen gibts Feedback.
Mfg
Mitchell
die andren Zeilenumbrüche werden richtig dargestellt.
Wieso macht dein Replace Sinn? Also ich glaubs dir schon, ich sehs nur nich
Error_reporting ist an, ich bekomme so keinen Fehler. Aber ich könnt mal ins Errorlog gucken, vielleicht gibts da was ^^. Morgen gibts Feedback.
Mfg
Mitchell
LÖSUNG 10.10.2011 um 00:47 Uhr
Ich glaubs net, mit deinem Replace funktioniert es. Error Reporting sagt zwar immernoch nix, aber gut, was soll da auch kommen? ^^
Dog, you made my day. Jetzt würd ichs nur noch gerne verstehen. Warum geht
nicht?
Und warum funktioniert deins?
Tausend dank schonmal.
Mfg
Mitchell
Dog, you made my day. Jetzt würd ichs nur noch gerne verstehen. Warum geht
str_replace("\r\n", chr(10).chr(13), $text)
Und warum funktioniert deins?
Tausend dank schonmal.
Mfg
Mitchell
LÖSUNG 10.10.2011 um 01:02 Uhr
Naja, ganz einfach:
In deiner E-Mail steht der Text "\r\n" (das sind die vier Zeichen \ r \ n)
Ein "\r\n" wird in PHP ausgewertet zu, na....genau einem Zeilenumbruch (also den zwei Zeichen CR LF).
Dein str_replace("\r\n", chr(10).chr(13), $text) würde also schlicht einen Zeilenumbruch mit einem Zeilenumbruch ersetzen (allerdings der hoch-untypischen Variante LF CR)
Du wolltest aber den Regulären Text "\r\n" in einen Zeilenumbruch umwandeln.
In dem Fall kannst du es entweder als "\\r\\n" oder '\r\n' schreiben.
Allerdings ist das immer noch keine Lösung.
Wenn in dem gePOSTeten Text die Zeilenumbrüche noch regulär sichtbar sind musst du ja irgendwo einen Code-Aufruf haben, der die Zeilenumbrüche konvertiert.
In deiner E-Mail steht der Text "\r\n" (das sind die vier Zeichen \ r \ n)
Ein "\r\n" wird in PHP ausgewertet zu, na....genau einem Zeilenumbruch (also den zwei Zeichen CR LF).
Dein str_replace("\r\n", chr(10).chr(13), $text) würde also schlicht einen Zeilenumbruch mit einem Zeilenumbruch ersetzen (allerdings der hoch-untypischen Variante LF CR)
Du wolltest aber den Regulären Text "\r\n" in einen Zeilenumbruch umwandeln.
In dem Fall kannst du es entweder als "\\r\\n" oder '\r\n' schreiben.
Allerdings ist das immer noch keine Lösung.
Wenn in dem gePOSTeten Text die Zeilenumbrüche noch regulär sichtbar sind musst du ja irgendwo einen Code-Aufruf haben, der die Zeilenumbrüche konvertiert.
LÖSUNG 10.10.2011 um 16:11 Uhr
Hm ok, das Escapen seh ich langsam ein ^^, aber dann frage ich mich immernoch, warum die erste Lösung str_replace{"\r\n\", "", $text) bei anderen funktioniert. Ich verstehe einfach nicht, warum manche escapen müssen und andere anscheinend nicht 
Nur nochmal nebenbei (stößt bei mir auch auf Unverständnis): Das selbe Script läuft auf meinem Webspace ohne Probleme. OS des Servers ist das selbe, der Unterschied ist nur, dass ich in dem Script auf meinem Webspace keinen Header (mit Charset) angegeben habe. Allerdings wird mir hier bei var_dump($text) auch nichts ausgegeben bzgl. der Zeilenumbrüche.
die Umbrüche sind ja nur im Plaintext sichtbar, so soll es doch auch sein, oder nicht? Im Browserfenster werden die Zeilenumbrüche natürlich nicht dargestellt, nur im Quelltext. Und dort wird \r\n behandelt, wie in einer textarea...es wird normal dargestellt.
Oder meinst du was anderes?
Mfg
Mitchell
Nur nochmal nebenbei (stößt bei mir auch auf Unverständnis): Das selbe Script läuft auf meinem Webspace ohne Probleme. OS des Servers ist das selbe, der Unterschied ist nur, dass ich in dem Script auf meinem Webspace keinen Header (mit Charset) angegeben habe. Allerdings wird mir hier bei var_dump($text) auch nichts ausgegeben bzgl. der Zeilenumbrüche.
Wenn in dem gePOSTeten Text die Zeilenumbrüche noch regulär sichtbar sind musst du ja irgendwo einen Code-Aufruf haben, der die Zeilenumbrüche konvertiert.
die Umbrüche sind ja nur im Plaintext sichtbar, so soll es doch auch sein, oder nicht? Im Browserfenster werden die Zeilenumbrüche natürlich nicht dargestellt, nur im Quelltext. Und dort wird \r\n behandelt, wie in einer textarea...es wird normal dargestellt.
Oder meinst du was anderes?
Mfg
Mitchell
LÖSUNG 10.10.2011 um 17:43 Uhr
LÖSUNG 10.10.2011 um 19:38 Uhr
LÖSUNG 10.10.2011 um 20:21 Uhr
LÖSUNG 10.10.2011 um 20:26 Uhr
Irgendwie war mir das schon klar....
Damit meinte ich, dass die Zeilenumbrüch als
dargestellt werden.
Ist für mich kein regulärer Zeilenumbruch.
Womit wir wieder beim Thema sind: Auf dem Server läuft irgendein Modul, dass Zeilenumbrüche escapt.
Die Zeilenumbrüche sollten dann regulär dargestellt werden.
Damit meinte ich, dass die Zeilenumbrüch als
Hallo
Welt
Welt
dargestellt werden.
Hallo\r\nWelt
Ist für mich kein regulärer Zeilenumbruch.
Womit wir wieder beim Thema sind: Auf dem Server läuft irgendein Modul, dass Zeilenumbrüche escapt.
LÖSUNG 11.10.2011 um 15:38 Uhr
ach so meinste das
...kann ich dir leider nicht sagen, vielleicht in dem CMS irgendwas. Ich wollte jetzt nur dafür sorgen, dass dieses Formular richtig ankommt. Bei Gelegenheit schaue ich mal nach, momentan bin ich erstmal zufrieden ^^^.
Danke nochmal, hast dir ein Bier oder nen Kaffee verdient.
Mfg
Mitchell
Danke nochmal, hast dir ein Bier oder nen Kaffee verdient.
Mfg
Mitchell