Moin!
Zeilenumbrüche werden, wenn sie richtig maskiert werden auch ohne Probleme verarbeitet. Für MySQL kümmert sich darum das bereits erwähnte mysql_real_escape_string(). Damit sie in HTML zur Geltung kommen sind sie als <br> zu schreiben (nl2br() hilft) oder der Text ist als preformatiert auszu zeichnen <pre></pre>.
Die Ausgabe in HTML kann sehr verschieden sein.
Zum einen kann der gespeicherte String 1:1 HTML-Quellcode darstellen. Dann muß man keinerlei Umwandlung mehr vornehmen, auch kein nl2br, weil alle gewünschten Zeilenumbrüche ja schon als <br> im Quelltext drinstehen, und alle Newline-Zeichen allerhöchstens den Quelltext nett formatieren, aber nicht optisch gelten sollen.
Will man diesen Quelltext aber in einer Textarea zur Bearbeitung anbieten, ist er mit htmlspecialchars() zu wandeln, weil innerhalb einer Textarea sowieso keine HTML-Tags vorkommen dürfen, und deshalb die Tag-Zeichen < und > als < und > geschrieben werden müssen. Ebenso muß das Und-Zeichen als & geschrieben werden - und wenn dann im Quelltext eben Entities vorkommen wie ä, dann werden die in der Textarea eben wirklich als "ä" angezeigt (in die Textarea ausgegeben als "&auml;"), und nicht als "ä" - alles andere ist grundsätzlich nicht möglich zu wandeln, ohne in Probleme zu geraten.
Man kann den String aber auch als darzustellenden Text ausgeben wollen. Dann sind die HTML-Zeichen < und > natürlich als solches auszugeben, also mit htmlspecialchars(), und damit die Zeilenumbrüche sichtbar werden, ist nl2br() anzuwenden.
So einen String in einer Textarea ist zwar auch mit htmlspecialchars() zu versehen, aber nl2br() muß in diesem Fall unterbleiben, weil die Zeilenumbrüche im String von der Textarea schon als Umbruch erkannt und angezeigt werden.
Eine Stringausgabe innerhalb von <pre> hat auch keine Notwendigkeit für nl2br(), und evtl. auch keine für die Tag-Zeichen < und >, wenn man im String HTML-Formatierungen erlauben will. Es ist allerdings für die Verarbeitungslogik schlauer, derartige Formatierungen in einem Meta-Code zu speichern, oder beispielsweise einen BBCode-Parser für sowas zu verwenden, denn je nach Anwendung kann es böse sein, wenn wirklich beliebiges HTML durchkommt.
- Sven Rautenberg