Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Mailfunktion gibt Zeichen für Zeilenumbrüche in textarea aus

Frage Entwicklung PHP

Mitglied: Mitchell

Mitchell (Level 2) - Jetzt verbinden

08.10.2011, aktualisiert 14.01.2012, 7156 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:

01.
str_replace("\r\n", "", $text)
01.
str_replace("\r\n", "\r", $text)
01.
str_replace("\r\n", "\n", $text)
01.
str_replace("\r\n", "\n\n", $text)
01.
str_replace("\r\n", "<br>", $text)
01.
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
01.
nl2br($text)
01.
htmlentities($text)
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
Mitglied: dog
08.10.2011 um 18:17 Uhr
Also nur damit ich dich richtig verstehe:

Wenn der Benutzer
Hallo
Welt

eingibt kommt bei dir die Mail als
Hallo\r\nWelt

an?
Bitte warten ..
Mitglied: Mitchell
08.10.2011 um 21:57 Uhr
richtig

PS: Das sind 30 Zeichen
Bitte warten ..
Mitglied: dog
08.10.2011 um 22:02 Uhr
Da das ein übliches Risiko bei Mailformularen ist würde ich mal auf Sicherheitsfunktionen wie mod_security oder suhosin patch tippen.

Das lässt sich prüfen wenn du einfach mal ganz oben im Script
01.
<?php var_dump($_POST); ?>
machst.
Die Zeilenumbrüche sollten dann regulär dargestellt werden.
Bitte warten ..
Mitglied: Mitchell
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:

01.
var_dump($text)
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
Bitte warten ..
Mitglied: Arano
09.10.2011 um 14:51 Uhr
Hallo

...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
Bitte warten ..
Mitglied: Mitchell
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 ;)

schon klar im Quelltext ist der Zeilenumbruch vorhanden.

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:
01.
<textarea name="text" cols="50" rows="8" id="text"></textarea>
und
01.
mail($mail, $subject, $msg, $header)
in $msg stehen die restlichen Variablen und natürlich dann die Variable $text.

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...

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
01.
var_dump(mail($to, $subject, $msg, $from)
, dann bekomme ich ein bool(false)

Was soll das heißen ?
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)

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:
01.
str_replace("\r\n", chr(10).chr(13), $text)
Mfg
Mitchelll
Bitte warten ..
Mitglied: Arano
09.10.2011 um 15:46 Uhr
Hi Mitchell

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.
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.

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.
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
Bitte warten ..
Mitglied: Mitchell
09.10.2011 um 16:38 Uhr
Hi Arano,

jep, ich verwende Windows XP

Code für die Mail + Header:

01.
	$header  = "MIME-Version: 1.0\r\n"
02.
	$header .= "Content-type: text/plain; charset=utf-8\r\n"
03.
	$header .= "Content-Transfer-Encoding: quoted-printable\r\n"
04.
	$header .= "From: Bestellung|Graphic-24.de ".$_POST['email']."\r\n"
05.
 
06.
 
07.
	$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;
Die Mail geht als Plain raus, wie oben zu sehen ist ^^. Habs aber auch schon mit html probiert.

Mfg
Mitchell
Bitte warten ..
Mitglied: dog
09.10.2011 um 16:51 Uhr
Werden denn die anderen Zeilenumbrüche in der Mail richtig dargestellt?
$msg = $vorname."\r\n\r\n".$nachname

Thema str_replace:
Das einzige was entfernt Sinn machen würde wäre
01.
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
Bitte warten ..
Mitglied: Mitchell
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
Bitte warten ..
Mitglied: Mitchell
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
01.
str_replace("\r\n", chr(10).chr(13), $text)
nicht?
Und warum funktioniert deins?

Tausend dank schonmal.

Mfg
Mitchell
Bitte warten ..
Mitglied: dog
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.
Bitte warten ..
Mitglied: Mitchell
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.

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
Bitte warten ..
Mitglied: dog
10.10.2011 um 17:43 Uhr
die Umbrüche sind ja nur im Plaintext sichtbar, so soll es doch auch sein, oder nicht?

Ja
Bitte warten ..
Mitglied: Mitchell
10.10.2011 um 18:14 Uhr
was meinst du dann mit "allerdings..."?

Mfg
Mitchell
Bitte warten ..
Mitglied: dog
10.10.2011 um 19:38 Uhr
Naja, im POST ist der Zeilenumbruch noch da, aber wenn den Text an die Mail anhängst ist er auf einmal weg.
Da muss noch irgendwas dazwischen passieren
Bitte warten ..
Mitglied: Mitchell
10.10.2011 um 20:21 Uhr
nö...kannst ja oben gucken, mehr is da nich ^^. Außerdem ist im POST ja \r\n da, von daher passt das schon.

Mfg
Mitchell
Bitte warten ..
Mitglied: dog
10.10.2011 um 20:26 Uhr
Irgendwie war mir das schon klar....

Die Zeilenumbrüche sollten dann regulär dargestellt werden.

Damit meinte ich, dass die Zeilenumbrüch als

Hallo
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.
Bitte warten ..
Mitglied: Mitchell
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Firewall
gelöst Gibt es ein fertiges Web-Tunnel-Gateway? (27)

Frage von StefanKittel zum Thema Firewall ...

DNS
Nslookup gibt falschen DNS Namen zurück (3)

Frage von ultrapottoti zum Thema DNS ...

VB for Applications
gelöst VBA Text mit Format übertragen und Zeichen ergänzen (11)

Frage von Dau12345 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...