
29725
16.07.2011
Nl2br() soll nur einmal umwandeln
Viele kennen vermutlich das Problem beim speichern eines Datensatzes via Eingabeformular (z.B. bei einem Gästebuch) - Wenn man Absätze machen möchte drückt man ENTER, was dann als /n erkannt wird und nicht als <br> was dazu führt das der Datensatz als WURST ohne Absätze ausgegeben wird. NL2BR ermöglicht diese Absätze, aber es gibt ein Problem damit....
Ich habe ein Formular und speicherre die Daten in eine Datenbank
Der Code funktioniert einwandfrei, und sieht so aus: (das ist der Teil der mein Problem betrifft - STARK VEREINFACHT natürlich um es leichter zu veranschaulichen)
$Value=nl2br($_POST['BLA']);
INSERT INTO DATENBANK (Inhalt_aus_der_DB) VALUES('$Value');
<textarea> $Inhalt_aus_der_DB </textarea>
Hoffe das ist verständlich.... :/
Folgendes passiert:
Eine Admin-Seite öffnet ein Textfeld worin der zuvor gespeicherte Inhalt eingelesen wird und direkt bearbeitet werden kann. Das Problem dabei ist jetzt aber:
Wenn ich Änderungen vornehme und die Daten via REPLACE INTO Anweisung überschreibe, erhalte ich weiterhin bei jedem Zeilenumbruch der durch /n erzeugt wurde ein zusätzliches <br/>... und genau das ist schlecht da ich nach 5-maliger Änderung des Datensatzes statt nur einem <br> plötzlich 6 <br> in der Ausgabe habe... Das Layout ist damit zerstört.
Hat jemand vl. die Lösung dazu ?
Ich habe ein Formular und speicherre die Daten in eine Datenbank
Der Code funktioniert einwandfrei, und sieht so aus: (das ist der Teil der mein Problem betrifft - STARK VEREINFACHT natürlich um es leichter zu veranschaulichen)
$Value=nl2br($_POST['BLA']);
INSERT INTO DATENBANK (Inhalt_aus_der_DB) VALUES('$Value');
<textarea> $Inhalt_aus_der_DB </textarea>
Hoffe das ist verständlich.... :/
Folgendes passiert:
Eine Admin-Seite öffnet ein Textfeld worin der zuvor gespeicherte Inhalt eingelesen wird und direkt bearbeitet werden kann. Das Problem dabei ist jetzt aber:
Wenn ich Änderungen vornehme und die Daten via REPLACE INTO Anweisung überschreibe, erhalte ich weiterhin bei jedem Zeilenumbruch der durch /n erzeugt wurde ein zusätzliches <br/>... und genau das ist schlecht da ich nach 5-maliger Änderung des Datensatzes statt nur einem <br> plötzlich 6 <br> in der Ausgabe habe... Das Layout ist damit zerstört.
Hat jemand vl. die Lösung dazu ?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 169849
Url: https://administrator.de/forum/nl2br-soll-nur-einmal-umwandeln-169849.html
Ausgedruckt am: 08.04.2025 um 04:04 Uhr
3 Kommentare
Neuester Kommentar
Hallo Christpoh.
Hehe, ist doch faszinierend wie das alles funktioniert oder !?
Wie du ja schon richtig erkannt hast, haben wir einmal das Steuerzeichen
Im HTML-Quelltext haben wir das "Problem", das ein Zeilenumbruch (\n) sehr oft vorkommt z.B hinter den meisten HTML-Tags zur Strukturierung des Quelltextes, aber natürlich auch in den Texten selber.
Welcher dieser Zeilenumbrüche soll den nun angezeigt werden und welche nicht !?
Darum gibt es das HTML-Tag
Die Eingaben in Input-Feldern kommen vom System, also wird der Zeilenumbruch durch (\n) dargestellt.
Damit man aber mehrzeilige Textareas mit einem Text (strukturiert) vor belegen kann z.B. mit einem Gästebucheintrag, __kann__ man hier die br-Tags verwenden - sollte man aber nicht.
Dein Problem entsteht in dem Moment in dem das Formular abgeschickt wird. Den nun sendet der Browser/das System die Eingabe, mit Zeilenumbrüchen (\n) und br-Tags an den Server und schon hast du dein Problem mit den zuerst doppelten br-Tags und dann dreifach, vierfach,...
Speichere den Text so wie er ist in die Datenbank, also mit
Auf der "Adminseite" lässt du den Eintrag natürlich so wie er ist damit in der Textarea keine br-Tags stehen sondern nur
Tja, du siehst, kein Fehler von
Ein schönes Wochenende noch
~Arano
Hehe, ist doch faszinierend wie das alles funktioniert oder !?
Wie du ja schon richtig erkannt hast, haben wir einmal das Steuerzeichen
\n
und einmal das HTML-Tag <br>
.\n
ist das "System-Umbruch-Zeichen" (\r\n= Windows, \n=Linux und \r=Mac) (\n=New line, \r= cariage Return)<br>
das in HTML.Im HTML-Quelltext haben wir das "Problem", das ein Zeilenumbruch (\n) sehr oft vorkommt z.B hinter den meisten HTML-Tags zur Strukturierung des Quelltextes, aber natürlich auch in den Texten selber.
Welcher dieser Zeilenumbrüche soll den nun angezeigt werden und welche nicht !?
Darum gibt es das HTML-Tag
<br>
, welches einen __visuellen Zeilenumbruch__ erzeugt. Sprich, der Browser zeigt dir den Text umgebrochen an, im Quelltext steht er aber in einer Zeile.Die Eingaben in Input-Feldern kommen vom System, also wird der Zeilenumbruch durch (\n) dargestellt.
Damit man aber mehrzeilige Textareas mit einem Text (strukturiert) vor belegen kann z.B. mit einem Gästebucheintrag, __kann__ man hier die br-Tags verwenden - sollte man aber nicht.
Dein Problem entsteht in dem Moment in dem das Formular abgeschickt wird. Den nun sendet der Browser/das System die Eingabe, mit Zeilenumbrüchen (\n) und br-Tags an den Server und schon hast du dein Problem mit den zuerst doppelten br-Tags und dann dreifach, vierfach,...
Speichere den Text so wie er ist in die Datenbank, also mit
\n
und wandele sie erst bei der Ausgabe auf der Seite mit nl2br()
zu <br>
um.Auf der "Adminseite" lässt du den Eintrag natürlich so wie er ist damit in der Textarea keine br-Tags stehen sondern nur
\n
Tja, du siehst, kein Fehler von
nl2br()
nur ein Anwendungsfehler Ein schönes Wochenende noch
~Arano
Arano hat vollkommen recht.
Ein andere Lösungsansatz ohne nl2br wäre indem du mit CSS arbeitest.
So haste ohne deine nl2br auch einen visuellen Umbruch.
PS: Soll HTML im Code erlaubt sein? Kann ich nicht entnehmen und würde mich damit noch befassen und ggf. filtern.
Ein andere Lösungsansatz ohne nl2br wäre indem du mit CSS arbeitest.
<div style="white-space: pre;">
Mein
Text
</div>
So haste ohne deine nl2br auch einen visuellen Umbruch.
PS: Soll HTML im Code erlaubt sein? Kann ich nicht entnehmen und würde mich damit noch befassen und ggf. filtern.