Zeilenumbruchproblem
Zeilenumbruchproblem
- php
0 Sven Rautenberg0 ulu0 Sven Rautenberg0 ulu
Guten Tag!
Ich habe ein - wer hätte es gedacht - Zeilenumbruchproblem ;)
Und zwar habe ich ein Formular, das folgendermaßen aussieht:
<form name="message" action="speichern.php" method="post">
<textarea cols="100" rows="5"> </textarea>
<input type="submit" value="Speichern">
</form>
Mein Problem ist jetzt folgendes:
Der Text, den ich in diese Textarea eingebe, besitzt genau einen Zeilenumbruch. Wenn ich mir jetzt in der speichern.php den Inhalt von $_POST[0] (also meinen gespeicherten Textarea-Inhalt) ausgeben lasse, erhalte ich einen einzeiligen String OHNE Zeilenumbruch!! Warum??
Das Interessante dabei ist vor allem, dass, wenn ich $_POST[0] in eine Textdatei schreibe, der Zeilenumbruch plötzlich berücksichtigt wird, und ich in der Datei dann 2 Zeilen habe, obwohl ich bei der einfachen Ausgabe mit echo oder print nur eine Zeile hatte!!
Versteht ihr mein Problem??
Ich würde nämlich gerne den Zeilenumbruch (wird ja normalerweise durch ein \n dargestellt) maskieren, indem ich das \n durch \n ersetze, aber das Problem is schlicht und ergreifend, dass in meinem String kein \n ist!?
Habt ihr nen Lösungsansatz? Ich werd daraus nicht mehr schlau ...
Moin!
<form name="message" action="speichern.php" method="post">
<textarea cols="100" rows="5"> </textarea>
<input type="submit" value="Speichern">
</form>
>
> Mein Problem ist jetzt folgendes:
> Der Text, den ich in diese Textarea eingebe, besitzt genau einen Zeilenumbruch. Wenn ich mir jetzt in der speichern.php den Inhalt von $\_POST[0] (also meinen gespeicherten Textarea-Inhalt) ausgeben lasse, erhalte ich einen einzeiligen String OHNE Zeilenumbruch!! Warum??
Wie läßt du dir den String ausgeben?
> Das Interessante dabei ist vor allem, dass, wenn ich $\_POST[0] in eine Textdatei schreibe, der Zeilenumbruch plötzlich berücksichtigt wird, und ich in der Datei dann 2 Zeilen habe, obwohl ich bei der einfachen Ausgabe mit echo oder print nur eine Zeile hatte!!
Dann ist der Zeilenumbruch vorhanden, du siehst ihn in deiner Testausgabe nur nicht. Dran gedacht, dass HTML die Zeilenumbrüche (sowie auch multiple Leerzeichen, Tabulatoren etc.) zu einem einzigen Leerzeichen zusammenfaßt?
Benutze <pre>, um diesen Whitespace im Browser sichtbar zu machen, oder betrachte dir den ausgegebenen HTML-Quelltext (darin steht der Zeilenumbruch).
> Ich würde nämlich gerne den Zeilenumbruch (wird ja normalerweise durch ein \n dargestellt) maskieren, indem ich das \n durch \\n ersetze, aber das Problem is schlicht und ergreifend, dass in meinem String kein \n ist!?
Warum maskieren? Bedenke, dass die Darstellung "\n" lediglich eine von PHP verwendete Form ist, um das ASCII-Zeichen Nr. 10 für den Programmierer handhabbar eingeben zu können. Du siehst es im Editor so. Interpretiert wird es aber direkt beim Parsen als ASCII-Zeichen 10, nicht als "Backslash-n".
- Sven Rautenberg
--
"Love your nation - respect the others."
Hallo zusammen,
ich versuche gerade ein Forum selbst zu schreiben und habe ein ganz ähnliches Problem, ich schreibe es mal einfach hier mit rein.
Wenn jemand einen Beitrag schreibt wird der mit allen Leerzeilen und Zeilenumbrüchen gespeichert. Will ich diesen Beitrag ausgeben und setze die Ausgabe in <pre> funktioniert das auch ganz gut.
Das Problem ist jetzt das wenn jemand einen langen Text ohne Zeilenumbruch schreibt wird mir dieser auch ohne Zeilenumbrüche angezeigt so das dass Browserfenster sehr breit wird.
Nun habe ich versucht mit <pre width=500> die Breite zu begrenzen was er im Opera und Firefox auch sauber macht, nur der liebe Internet Explorer sieht das mal wieder anders und ignoriert meine Breitenangabe.
Was kann ich tun damit es auch im IE klappt?
Moin!
Wenn jemand einen Beitrag schreibt wird der mit allen Leerzeilen und Zeilenumbrüchen gespeichert. Will ich diesen Beitrag ausgeben und setze die Ausgabe in <pre> funktioniert das auch ganz gut.
Ohne <pre> würde es besser funktionieren, wenn du den Zeilenumbruch in ein <br> wandelst bei der Ausgabe des Textes.
Das Problem ist jetzt das wenn jemand einen langen Text ohne Zeilenumbruch schreibt wird mir dieser auch ohne Zeilenumbrüche angezeigt so das dass Browserfenster sehr breit wird.
Damit wäre dieses Problem dann vom Tisch, weil der Browser den Text dann selbst umbricht.
Bei der Ausgabe in eine Textarea zur Bearbeitung mußt du natürlich diese <br>-Wandlung nicht vornehmen.
Bei beiden Methoden mußt du hingegen eine Wandlung der Zeichen, die in HTML Sonderbedeutung haben (<, >, &), in Entities vornehmen (<, >, &).
In PHP gibts für beides passende Funktionen: nl2br() und htmlspecialchars().
- Sven Rautenberg
Vielen Dank erstmal für die schnelle Antwort,
werde dann mal versuchen ein wenig mit diesen Funktionen rumzuprobieren
Gruß Ulu