List met BBcode schrijven

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Maurits de Jong

Maurits de Jong

18/01/2011 21:50:31
Quote Anchor link
Hi allen,

Ik ben bezig met een soort BBcode aan het schrijven. Nu wil ik zorgen dat iemand die in BBcode schrijft, dit kan opschrijven:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
Hans, hier het boodschappenlijstje:
* 2,5 kg aardappels
* 2 pakken melk
* 500 g rundergehakt


om dit te bereiken:

Hans, hier het boodschappenlijstje:
  • 2,5 kg aardappels
  • 2 pakken melk
  • 500 g rundergehakt


Hoe kan ik dat bereiken? Ik heb al een beetje zitten prutsen met reguliere expressies, waarin men zoekt naar een begin van een regel en dan een asterisk, maar je weet natuurlijk niet hoeveel lijst-items er zijn...
Gewijzigd op 18/01/2011 21:52:24 door Maurits de Jong
 
PHP hulp

PHP hulp

20/11/2024 17:27:27
 
Mark L

Mark L

18/01/2011 22:59:21
Quote Anchor link
Leuk! Dit heb ik laatst nog gemaakt. Ik heb het zelf gedaan met een preg_replace_callback();

Je kunt als pattern dan deze gebruiken '#((^|\n)( |\t)*\*(.*?)){2,}\n#', waarbij je er zeker van moet zijn dat de enters in de string ook echt als \n zijn, en niet als \r\n of iets anders.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
Hans, hier het boodschappenlijstje:
* 2,5 kg aardappels
* 2 pakken melk
* 500 g rundergehakt

Maar vergeet ook niet:
   * 3 ons worst
   * vijf kilo mais
Trouwens, ik gebruik hier een aterisk: *, maar er gebeurt niets.

Ook nu niet:
* Bij gebruik van maar n aterisk maak je uiteraard ook geen opsomming.


Zowel lines 2-4 wordt gepakt door de pattern. Maar ook lines 7-8 wordt gepakt. De rest niet!

Bij de preg_replace_callback kun je dan een functie aanroepen, die de volledige string krijgt. Hier kun je dan de aterisk (*) exploden uit die string en heb je een array met alle list-items.
 
Maurits de Jong

Maurits de Jong

18/01/2011 23:27:01
Quote Anchor link
Mark L op 18/01/2011 22:59:21:
Leuk! Dit heb ik laatst nog gemaakt.

Wat grappig!

Thanks! Ik ga er direct mee aan de slag!
 
Koz T

Koz T

15/05/2012 14:36:27
Quote Anchor link
Dit is precies wat ik nodig heb! Zou iemand deze functie met ons willen delen?
 
Victor -

Victor -

15/05/2012 17:25:41
Quote Anchor link
@Ties, Dat staat toch in de comments hierboven?
Ik heb het niet getest, maar dit zou moeten werken.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$string
= "Hans, hier het boodschappenlijstje:\n
* 2,5 kg aardappels\n
* 2 pakken melk\n
* 500 g rundergehakt\n"
;
$uitkomst = preg_replace_callback('#((^|\n)( |\t)*\*(.*?)){2,}\n#', 'make_list_items', $string);

function
make_list_items($string = null) {
    if($string !== null) {
        return preg_replace('#((^|\n)( |\t)*\*(.*?)){2,}\n#', '<li>$1</li>', $string);
    }
}

?>
Gewijzigd op 15/05/2012 17:40:42 door Victor -
 
Wouter J

Wouter J

15/05/2012 17:29:29
Quote Anchor link
Dit is niet BBcode maar MarkDown. Zoek eens op php markdown
 
Koz T

Koz T

15/05/2012 21:21:15
Quote Anchor link
Ik heb hier precies gevonden wat ik bedoelde:
http://www.pfz.nl/archief/943778-ubb-met-automatische-list-herkenning/

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
function generate_lists($text)
{

    $lists = array();
    preg_match_all("#(\n|\r)(\s{0,}-(.*))+#", $text, $lists, PREG_PATTERN_ORDER);
    if(count($lists) > 0)
    {

        unset($lists[1]); // not neccesary here
        foreach($lists[0] as $list)
        {

            $items = array();
            $listcode = "\n<ul>\n";
            preg_match_all("#^\s{0,}-[\s]{0,}(.*)(\n|\r)?$#m", $list, $items, PREG_PATTERN_ORDER);
            unset($items[0]);
            foreach($items[1] as $item)
            {

                $listcode .= "  <li>" . $item . "</li>\n";
            }

            $listcode .= "</ul>";
            $text = str_replace($list, $listcode, $text);
        }
    }

    return $text;
}


$forum_post = "
Test.<br />
Nog een test<br />
- Bladiebladiebla
- Boedieboedieboe
Okee dan!<br />
- Bladiebladiebla
Er zijn vele ex-php'ers in de wereld.<br />
Boe"
;

echo generate_lists($forum_post);

?>
 



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.