Kein Quelltext-Zeilenumbruch bei textarea-Übernahme
gooxsy
- php
Hi,
das man die Funktion nl2br() verwenden muß, um Zeilenumbrüche in einer Textarea aus einem Formular zu übernehmen, ist bekannt.
Gibt es eigentlich auch eine Möglichkeit, daß mit obiger Funktion die <br />s gesetzt werden _und_ dabei aber die Sätze der Textarea im Quelltext in _einer_ Zeile stehen?
<?php
echo"<p>".$_POST['name']." schreibt Folgendes:</p>\n";
echo"<p>".$_POST['nachricht']."</p>\n";
?>
ergibt bei Eingabe von
++++++++++++++++++++++++++++++++++++++++++++
+ +
in der Textarea die Ausgabe => Satz 1. Satz 2. Satz3.
Im Quelltext sieht es so aus =>
<body>
<p>Hans schreibt Folgendes:</p>
<p>Satz1.
Satz2.
Satz3.</p>
</body>
<?php
echo"<p>".$_POST['name']." schreibt Folgendes:</p>\n";
echo"<p>".nl2br($_POST['nachricht'])."</p>\n";
?>
ergibt bei der gleichen Eingabe folgende Ausgabe:
Satz1.
Satz2.
Satz 3.
Im Quelltext sieht es so aus =>
<body>
<p>Hans schreibt Folgendes:</p>
<p>Satz1.<br />
Satz2.<br />
Satz3.</p>
</body>
Was ich gerne hätte, wäre ein Ergebnis wie Fall 2 _und_ folgendes Quellcode-Aussehen:
<body>
<p>Hans schreibt Folgendes:</p>
<p>Satz1.<br />Satz2.<br />Satz3.</p>
</body>
Ist das möglich?
MfG
gooxsy
Was ich gerne hätte, wäre ein Ergebnis wie Fall 2 _und_ folgendes Quellcode-Aussehen:
Ist das möglich?
Klar, nimm statt nl2br gleich eine vernünftige Funktion:
http://php.net/manual/de/function.str-replace.php
(5. Beispiel)
~JJ
Hi Jaroslav,
(5. Beispiel)
was genau auf der Seite meinst Du?
mfG
gooxsy
was genau auf der Seite meinst Du?
// Reihenfolge von Ersetzungen
$str = "Zeile 1\nZeile 2\rZeile 3\r\nZeile 4\n";
$order = array("\r\n", "\n", "\r");
$replace = '<br />';
Hi Jaroslav,
danke für den Verweis! Mir sind zwar momentan die Unterschiede zwischen \r, \n und \r\n nicht _ganz_klar, aber nachdem ich jetzt mehrere Forumsbeiträge im Archiv gelesen habe, habe ich es so verstanden, daß php von sich aus nur ein \r dazuhängen würde für jeden Zeilenumbruch, den ein User in der Textarea macht, aber Windows noch ein \n dazugibt, weshalb somit dann bei jedem Zeilenumbruch ein \r\n steht. Um alle Eventualitäten abzudecken, wird bei dem angegebenen Beispiel sowohl \r, als auch \n und \r\n ersetzt. Wie gesagt, mir ist es noch nicht _ganz_ klar, aber ich verstehe den php-Code und verwende das ab jetzt so. Danke nochmals!
mfG
gooxsy
Hello,
danke für den Verweis! Mir sind zwar momentan die Unterschiede zwischen \r, \n und \r\n nicht _ganz_klar, aber nachdem ich jetzt mehrere Forumsbeiträge im Archiv gelesen habe, habe ich es so verstanden, daß php von sich aus nur ein \r dazuhängen würde für jeden Zeilenumbruch, den ein User in der Textarea macht, aber Windows noch ein \n dazugibt, weshalb somit dann bei jedem Zeilenumbruch ein \r\n steht. Um alle Eventualitäten abzudecken, wird bei dem angegebenen Beispiel sowohl \r, als auch \n und \r\n ersetzt. Wie gesagt, mir ist es noch nicht _ganz_ klar, aber ich verstehe den php-Code und verwende das ab jetzt so. Danke nochmals!
Es machen nicht Windows oder PHP, sondern es haben die Browser zu tun und zwar unabhängig von der Plattform, auf der sie laufen. Der Browser muss einen Zeilenumbruch in der Textarea mit "\r\n", also "0D 0A" in Hexadezimalschreibweise, signieren. Das ist die für HTML/HTTP geforderte Zeichenfolge.
Die Browser, die ich kenne, ersetzen aber unvollständige Zeilenumbrüche durch vollständige. Ein einzelnes "\n" wird also genauso durch ein "\r\n" erstezt, wie ein einzelnes "\r".
Um jetzt bei der Ersetzung in Deinem Script alle Zeilenumbrüche zu erwischen, musst Du also erst die vollständigen ersetzen und dann die eventuell noch vagabundiernden unvollständigen. Davon sollten allerdings bei funktionierenden Browsern gar keine vorhanden sein. Die Reihenfolge, ob dann erst "\n" erstezt wird oder erst "\r" sollte unerheblich sein.
Ein harzliches Glückauf
Tom vom Berg
Hi Tom,
danke für die Erklärung!
gooxsy