Voorkomen dat linebreak wordt omgezet in <br />

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

KrissCross

KrissCross

21/05/2008 16:38:00
Quote Anchor link
In een database staat een tekst met UBB-codes zoals dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
Het volgende lijstje:
[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)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>

Dit leidt tot een HTML-output die luidt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
Het volgende lijstje:<br />
<ul><br />
<li>1e item</li>
etc...

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
 
PHP hulp

PHP hulp

24/11/2024 14:56:13
 
Leon Kunst

Leon Kunst

21/05/2008 16:55:00
Quote Anchor link
hmm die \n moet toch werken?
 
KrissCross

KrissCross

21/05/2008 16:58:00
Quote Anchor link
Leon Kunst schreef op 21.05.2008 16:55:
hmm die \n moet toch werken?

Geen idee wat je bedoelt...
 
Leon Kunst

Leon Kunst

21/05/2008 17:01:00
Quote Anchor link
Ik snap jou ook niet helemaal haha :P

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!!!!!!
 
KrissCross

KrissCross

21/05/2008 17:04:00
Quote Anchor link
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?

Ik wil die <br /> niet in mijn HTML-output hebben, want "<ul><br /><li> etc..." valideert niet.
 
Mitchell

Mitchell

21/05/2008 18:30:00
Quote Anchor link
Doet die nl2br dat juist 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
 
Erwin Nieuwenhuis

Erwin Nieuwenhuis

21/05/2008 18:34:00
Quote Anchor link
nl2br:

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.
 
KrissCross

KrissCross

21/05/2008 20:24:00
Quote Anchor link
Ik zit zelf in de richting van eregi_replace afhandeling (ipv preg_replace) te denken: iets in de trant van (/[^/ \n\r]*), maar krijg het met geen mogelijkheid voor elkaar.
Gewijzigd op 01/01/1970 01:00:00 door KrissCross
 
Noppes

Noppes

21/05/2008 20:27:00
Quote Anchor link
Voorkomen dat linebreak wordt omgezet in <br />

Het is al aangehaald door Erwin diehard

als je het wilt voorkomen dan haal je de string niet door nl2br()
 
KrissCross

KrissCross

21/05/2008 20:32:00
Quote Anchor link
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()

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...
 
Jelmer -

Jelmer -

21/05/2008 20:33:00
Quote Anchor link
... maar je wil juist wel dat linebreaks worden omgezet, maar net niet in je lijst. Kan je niet een preg_replace uithalen die alle newlines (of <br>'s, kan ook achteraf) die binnen de
    (of <ul></ul>) maar buiten de li's staan compleet eruit gooien?

    Of je vervangt nl2br met een eigen preg_replace die rekening houdt met list-stukjes, en daarbinnen geen newlines omzet.
     
    KrissCross

    KrissCross

    21/05/2008 21:01:00
    Quote Anchor link
    Heb de oplossing al bedacht, te simpel gewoon...
    Code (php)
    PHP script in nieuw venster Selecteer het PHP script
    1
    2
    3
    4
    <?php
        $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
     
    - -

    - -

    21/05/2008 22:06:00
    Quote Anchor link
    @Kriss: Maar laat de oude eronder ook staan, men kan het namelijk ook zo doen:
    Code (php)
    PHP script in nieuw venster Selecteer het PHP script
    1
    [list][item]LOL[/item][/list]
     
    KrissCross

    KrissCross

    21/05/2008 22:26:00
    Quote Anchor link
    Jonathan schreef op 21.05.2008 22:06:
    @Kriss: Maar laat de oude eronder ook staan, men kan het namelijk ook zo doen:
    Code (php)
    PHP script in nieuw venster Selecteer het PHP script
    1
    [list][item]LOL[/item][/list]

    Ja, gelijk heb je. Bedankt voor de tip!
     



    Overzicht Reageren

     
     

    Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.