Voorkomen dat linebreak wordt omgezet in <br />
Code (php)
1
2
3
4
5
6
2
3
4
5
6
Het volgende lijstje:
[list]
[item]1e item[/item]
[item]2e item[/item]
[item]3e item[/item]
[/list]
[list]
[item]1e item[/item]
[item]2e item[/item]
[item]3e item[/item]
[/list]
Dit wordt door een UBB-parser gehaald die o.a. het volgende doet:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$string = nl2br($string);
$string = preg_replace("#\[list\](.*?)\[/list\]#si", "<ul>\\1</ul>", $string);
$string = preg_replace("#\[item\](.*?)\[/item\]#si", "<li>\\1</li>", $string);
?>
$string = nl2br($string);
$string = preg_replace("#\[list\](.*?)\[/list\]#si", "<ul>\\1</ul>", $string);
$string = preg_replace("#\[item\](.*?)\[/item\]#si", "<li>\\1</li>", $string);
?>
Dit leidt tot een HTML-output die luidt:
hetgeen niet valideert vanwege de break direct na de <ul>. Hoe los ik dit op zodat de \n direct na <list> niet wordt vertaald in een linebreak? (Hetzelfde geldt ook voor de break na </li>.)
Gewijzigd op 01/01/1970 01:00:00 door KrissCross
hmm die \n moet toch werken?
Leon Kunst schreef op 21.05.2008 16:55:
hmm die \n moet toch werken?
Geen idee wat je bedoelt...
maar je wilt die <br> niet in je script hebben
maar wel dat die <ul> op een nieuwe regel komt?
Dat werkt geloof ik met \n
500e post!!!
joepiee!!!!!!
Leon Kunst schreef op 21.05.2008 17:01:
maar je wilt die <br> niet in je script hebben
maar wel dat die <ul> op een nieuwe regel komt?
maar wel dat die <ul> op een nieuwe regel komt?
Ik wil die <br /> niet in mijn HTML-output hebben, want "<ul><br /><li> etc..." valideert niet.
Edit: Zou het dan niet beter zijn als je die nl2br pas later doet of dat je een check inbouwt dat hij html objecten en of [] moet negeren?
Gewijzigd op 01/01/1970 01:00:00 door Mitchell
NewLine to BReak
jah, dat doet hij :)
ik heb alleen geen idee hoe je dat op kunt lossen, maar als je gebruik maakt van user-input wil je xhtml wel vaker niet valideren.
Gewijzigd op 01/01/1970 01:00:00 door KrissCross
Het is al aangehaald door Erwin diehard
als je het wilt voorkomen dan haal je de string niet door nl2br()
Noppes schreef op 21.05.2008 20:27:
Het is al aangehaald door Erwin diehard
als je het wilt voorkomen dan haal je de string niet door nl2br()
als je het wilt voorkomen dan haal je de string niet door nl2br()
Ja, dat snap ik, maar dan wordt de rest van de tekst achter elkaar geplakt. Volgens mij moet ik opzoek gaan naar een andere BB parser...
Of je vervangt nl2br met een eigen preg_replace die rekening houdt met list-stukjes, en daarbinnen geen newlines omzet.
Code (php)
1
2
3
4
2
3
4
<?php
$string = nl2br($string);
$string = preg_replace("#\[list\]<br />(.*?)\[/list\]<br />#si", "<ul>\\1</ul>", $string);
?>
$string = nl2br($string);
$string = preg_replace("#\[list\]<br />(.*?)\[/list\]<br />#si", "<ul>\\1</ul>", $string);
?>
Gewijzigd op 01/01/1970 01:00:00 door KrissCross
Jonathan schreef op 21.05.2008 22:06:
Ja, gelijk heb je. Bedankt voor de tip!