nl2br Unzulänglichkeiten
Stephan
- php
Hallo zusammen,
ich hab mittlerweile an mehreren Stellen Textareas in denen User (HTML)-Text eingeben können und dessen Inhalt dann in einer Datenbank gespeichert wird und später wieder als HTML ausgegeben wird. Eigentlich eine typische Gästebuchfunktion.
Bis jetzt gebe ich dann die Ausgabe mit nl2br() formatiert aus, das funktioniert in den meissten Fällen auch wunderbar:
Eingabe-Bsp:
Das ist der
Gästebucheintrag.
wird zu
Das ist der </ br>
Gästebucheintrag.
Doch leider kommen auch immer wieder solche Einträge vor:
Das ist der <a href="http://xyz.de"
target="_blank">Link</a>
Oder:
<table>
<tr>
<td>Test1</td>
<td>Test2</td>
</tr>
</table>
Und dann sind die Ergebnisse von nl2br() katastrophal.
Jetzt hab ich schon öfter im Internet gesucht aber nix gefunden.
Das müsste doch irgendwie zu lösen sein, oder?
Da hat doch bestimmt einer von euch einen schlauen RegExp in der Tasche der die Zeilenumbrüche nur macht wenn die Zeile nicht mit nem HTML-Tag aufhört, oder? ;-)
So eine Funktion wäre bestimmt für mehr Personen hier interessant.
Gruß
Stephan
Huhu Stephan
Das müsste doch irgendwie zu lösen sein, oder?
Da hat doch bestimmt einer von euch einen schlauen RegExp in der Tasche der die Zeilenumbrüche nur macht wenn die Zeile nicht mit nem HTML-Tag aufhört, oder? ;-)
Du meinst wenn sich der Suchtreffer nicht innerhalb eines Tags befindet, oder?
Das kann man mit einem negativen lookahead machen.
http://de3.php.net/manual/en/reference.pcre.pattern.syntax.php
Das könnte in Deinem Beispiel ungefähr so ausschauen:
$regexp = "#(\n)(?![^<]+>)#";
Viele Grüße
lulu
Huhu lulu
Du meinst wenn sich der Suchtreffer nicht innerhalb eines Tags befindet, oder?
Ja innerhalb eines Tags, oder am Zeilenende ein HTML-Tag steht.
Bsp.
<table>
<tr>
<td>irgendwas</td>
Wird ja sonst noch zu
<table><br />
<tr><br />
<td>irgendwas</td>><br />
usw.
Kann man beides mit einem Regexp erschlagen?
Gruß
Stephan
Hi Stephan
mmmmh, so ganz habe ich es nicht begriffen welche Newlines denn
nun eigentlich ersetzt werden sollen.
Schreib doch mal ein kurzes Vorher-Nachher Beispiel.
Viele Grüße
lulu
mmmmh, so ganz habe ich es nicht begriffen welche Newlines denn
nun eigentlich ersetzt werden sollen.Schreib doch mal ein kurzes Vorher-Nachher Beispiel.
Okay:
Bei folgendem String soll der _Text_ umgebrochen werden so dass weiterhin valider HTML besteht:
__________________________________
Hallo,
das soll ein Test sein: <b>fetter Text</b>
hier zur verdeutlichung der Inhalte die Texte in einer Tabelle:
<table>
<tr>
<td>Punkt 1</td>
<td>Infos zu Punkt 1</td>
</tr>
<tr>
<td>Punkt 2</td>
<td>Information die
über 2 Zeilen gehen und somit auch einen
Zeilen Umbruch brauchen</td>
</tr>
</table>
Und noch ein <a href="tag.html"
target="_blank">Tag</a> der über
2 Zeilen geht.
__________________________________
soll werden zu:
__________________________________
Hallo,<br />
<br />
das soll ein Test sein: <b>fetter Text</b><br />
<br />
hier zur verdeutlichung der Inhalte die Texte in einer Tabelle:<br />
<br />
<table>
<tr>
<td>Punkt 1</td>
<td>Infos zu Punkt 1</td>
</tr>
<tr>
<td>Punkt 2</td>
<td>Information die<br />
über 2 Zeilen gehen und somit auch einen<br />
Zeilen Umbruch brauchen</td>
</tr>
</table>
<br />
Und noch ein <a href="tag.html"
target="_blank">Tag</a> der über<br />
2 Zeilen geht.<br />
__________________________________
Ist sowas überhaupt lösbar???
Hallo Stephan,
Bei folgendem String soll der _Text_ umgebrochen werden so dass weiterhin valider HTML besteht:
__________________________________
[Beispielcode]
__________________________________Ist sowas überhaupt lösbar???
Meiner Meinung nach nicht ohne größeren Aufwand.
Es ließe sich vielleicht lösen, wenn du das Dokument mit den DOM-Erweiterungen von PHP auseinandernimmst und dann die Zeilenumbrüche umwandelst. Aber das ist so ein großer Aufwand (du musst sehr viele Dinge beachten), sodass du vielleicht mit BBCode besser bedient bist.
Viele Grüße
Patrick Canterino
Hi,
Bei folgendem String soll der _Text_ umgebrochen werden so dass weiterhin valider HTML besteht:
Warum willst Du in einer td mit einem hartkodierten Zeilenumbruch arbeiten?
Der Text bricht doch sowieso um, wenn der Inhalt breiter würde als es die Tabellenzelle zuläßt.
(Wobei ich mich sowieso frage, ob es sich hier überhaupt um tabellarische Daten handelt ...)
cu,
Andreas