Antworten auf deine Fragen:
Neues Thema erstellen

Problem mit nl2br()

KATERchen

Aktives Mitglied

Ich hoffe, jemand hat ein Tip für mich.
Ich habe ein Select-Feld zum eingeben eines längeren Textes. Dieser wird in eine Datenbank gespeichert. Damit die Umbrüche erhalten bleiben, nutze ich nl2br(). Soweit klappt auch alles, wie es soll.
Nun habe ich aber auch die Möglichkeit, den Text aus der Datenbank aufzurufen, zu ändern und wieder neu abzuspeichern. Nun habe ich jedoch nach jeden neuen abspeichern ein <br> mehr pro Zeilenumbruch, einfach nur durch das neue abspeichern. Wie kann ich das verhindern?
 

sokie

Mod | Web

AW: Problem mit nl2br()

unter windows wird ein Zeilenumbruch durch \n\r repräsentiert.
deshalb bekommst du bei nl2br nicht nur für den umbruch ein "<br />" sondern ein <br/>\r. wenn du das speicherst, und zur nächsten bearbeitung in ein (zB textarea) gibst hast du wieder ein <br /> und eine leerzeile also statt
HTML:
eine Zeile mit <br />Umbruch
bekommst du
HTML:
eine Zeile mit <br />
Umbruch
wenn du das dann zur Bearbeitung abschickst, wird der weiter umbruch auch wieder zu einem <br /> usw.
Du musst also theoretisch nach dem nl2br($var) die überzähligen \r entfernen.

Ich habe ein Select-Feld zum eingeben eines längeren Textes.
ist das Select das passende Element zur Eingabe von Texten?
 

KATERchen

Aktives Mitglied

AW: Problem mit nl2br()

Scheinbar geht das aber nur theoretisch. Ich hab es jetzt mal so versucht:
$inhalt = ereg_replace( '<br />\r', '<br />', $inhalt );
aber das klappt nicht. Das einzige was geht, ist <br /><br /> durch <br /> zu ersetzen. Aber dann habe ich ein Problem, wenn ich eine Leerzeile haben will :(
ist das Select das passende Element zur Eingabe von Texten?
Ups - habe mich heute den ganzen Tag mit einem Select-Feld rumgeärgert, dass ich wohl schon gar nichts anderes mehr sehe :). Meinte natürlich Textarea...
 

ChrisvA

Aktives Mitglied

AW: Problem mit nl2br()

Versuch das ganze doch mal so, schreibe den String in die Datenbank, ohne ihn zuvor mit nl2br() zu verändern. Normalerweiße werden dann von MySQL die Zeilenumbrüche erkannt und werden somit auch gespeichert.

Erst wenn du den String wieder ausgibst, solltest du dann htmlentities(nl2br($string)) anwenden. (htmlentities ist für die Sicherheit sehr wichtig, da das injizieren von HTML-Code dann unmöglich wird)

EDIT: Für ein Textarea hast du ja schon bemerkt, dass du nl2br nicht anweden darfst, da sonst ja <br> da steht. Trotzdem solltest du aber htmlentities() anwenden.
 
Zuletzt bearbeitet:

KATERchen

Aktives Mitglied

AW: Problem mit nl2br()

Ich glaube, ich komme heute nicht mehr ganz mit.
Also, htmlentities(nl2br($string))gibt mir mit jedem Aufruf ein weiteres <br />. Nur htmlentities($string) gibt mir nur ein <br /> zurück, egal wie oft ich einen Zeilenwechsel mache. Aber zumindest kann ich manuel so viele <br /> einfügen, wie ich will und sie bleiben erhalten.

[edit]
Ob ich es vor oder nach dem Einfügen in die Datenbank schreibe, bleibt gleich.
 

ChrisvA

Aktives Mitglied

AW: Problem mit nl2br()

htmlentities(nl2br($string))
Das ist gerade falsch. es muss nl2br(htmlentities($string))heißen.
Hast du eigentlich eine Beispielseite online, auf der wir uns das ganze mal anschauen können. Allmählich komme auch ich nicht mehr ganz so mit.


 

KATERchen

Aktives Mitglied

AW: Problem mit nl2br()

Okay, gestern hab ich wohl echt nix mehr verstanden. :)
Aber viel weiter bin ich jetzt auch noch nicht gekommen.
Ob nl2br(htmlentities($string)) oder htmlentities(nl2br($string)) bleibt vom Ergebnis her gleich. Nach jedem Aufruf habe ich ein weiteres <br />

@chrisA
Du sagtest, für eine Textarea darf ich nl2br nicht nehmen. Was soll ich aber sonst nehmen?

Ich habe jetzt mal ein das nötige online gestellt.


und



Abschicken speichert die Änderungen und läd die Seite neu und Update und zurück speichert und Zeigt den Text dann im normalen HTML
 

ChrisvA

Aktives Mitglied

AW: Problem mit nl2br()

Beim 1. funktioniert das einfügen in das Textarea ja. (Zeilenvorschub blieb bei mir zumindest erhalten) allerdings in der HTML-Ansicht klappt es noch nicht. Dort musst du also noch nl2br() einfügen.

Also allgemein gilt. Für Textarea darf man nur mit htmentities() ausgeben. Für sonstige HTML-Ansichten braucht man nl2br(htmlentities()).
 

KATERchen

Aktives Mitglied

AW: Problem mit nl2br()

:kopfpatsch: Traue mich fast gar nicht, das jetzt zuzugeben. Dadurch das in der HTML-Ansicht alles schön hintereinander weg stand, dachte ich, es funktioniert nicht. Mit nl2br klappt es jetzt aber perfekt!!!
DANKE :)
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben