Pagina 1 van 1

[php] Quote in een quote

BerichtGeplaatst: 02 feb 2009 17:08
door Stefan
Ik zat op mijn eigen forum met een probleem dat de quote in een quote niet goed geparsed werd. Hiervoor heb ik een kleine snippet geschreven...

Code: Selecteer alles
    // Opmaak voor de quote
    $quote = '<div id="ubb_quote"><span>Quote%naam%:</span><div class="quote">%quote%</div></div>'; 

    
// Herhaal voor iedere quote
    while(preg_match('/\[quote(=([a-z0-9\_ ]{2,20}))?\](.+?)\[\/quote\]/is', $bericht)){ 
        
        $bericht 
= preg_replace( 
            
// Quote openen (eventueel quote = ...)
            '/' . '\[quote(=([a-z0-9\_ ]{2,20}))?\]'. 
            
            
// Quote inhoud
            '((.(?!\[quote\]))*?)'. 
            
            
// Quote afsluiten
            '\[\/quote\]' . '/'.
             
            
'i'. // Hoofdletters
            's'. // Punt telt voor ieder teken, ook voor nieuwe regels
            'e'  // Vervanging voor de PHP-code
        , 
            
'strtr ( 
                // Haal opmaak voor quote op
                $quote
            ,
                array( 
                    // Zet de quote inhoud in quote opmaak
                    "%quote%" => "$3",
                    
                    // Controleer of er een naam is ingevuld, anders leeg
                    "%naam%" => (("$2" == "") ? "" : " $2") 
                ) 
            ); 
            '
        , 
            $bericht 
        
); 
    
} 
 


Ik hoor wel wat jullie er van vinden!

($bericht is de tekst die geparsed moet worden)

Re: [php] Quote in een quote

BerichtGeplaatst: 02 feb 2009 21:45
door ElbertF
Geneste BBCodes kun je niet met één regexje verwerken, daar zul je toch iets uitgebreiders voor moeten schrijven. Je moet steeds de buitenste match vervangen en dan opnieuw zoeken naar een match (in een loop).

Re: [php] Quote in een quote

BerichtGeplaatst: 03 feb 2009 16:48
door libia
ik nummer ze meestal, dan wordt
Code: Selecteer alles
[quote][quote][quote][/quote][/quote] [quote][/quote][/quote] [quote][/quote]

dit:
Code: Selecteer alles
[quote:1][quote:2][quote:3][/quote:3][/quote:2] [quote:2][/quote:2][/quote:1] [quote:1][/quote:1]

dan kun je het met een simpel regexje allemaal vervangen :)


hiermee heb je dus in totaal twee regexen nodig en geen loop :)

Re: [php] Quote in een quote

BerichtGeplaatst: 08 feb 2009 01:06
door ElbertF
En hoe nummer je ze dan zonder een loop? :}

Re: [php] Quote in een quote

BerichtGeplaatst: 08 feb 2009 15:52
door libia
ElbertF schreef:En hoe nummer je ze dan zonder een loop? :}

uhm.. ik weet het niet meer, misschien had ik dus eigenlijk wel een loop :D

Re: [php] Quote in een quote

BerichtGeplaatst: 10 feb 2009 19:28
door Stefan
Ik zit nu alleen nog met een vraagje over mijn eigen code:P dat komt vooral omdat ik neit goed met met preg_*

Als ik bij de [ quote=...] test [/quote] doe dan doet de quote het niet omdat de puntjes niet in de preg_* mogen staan. Hoe kan ik dit oplossen?

Re: [php] Quote in een quote

BerichtGeplaatst: 10 feb 2009 20:01
door Remi
Dan voeg je gewoon een puntje toe ;)
'/\[quote(=([a-z0-9\_. ]{2,20}))?\](.+?)\[\/quote\]/is'

Re: [php] Quote in een quote

BerichtGeplaatst: 11 feb 2009 13:18
door Stefan
Remi schreef:Dan voeg je gewoon een puntje toe ;)
'/\[quote(=([a-z0-9\_. ]{2,20}))?\](.+?)\[\/quote\]/is'
Dat had ik ook gedaan, alleen dat deed ie niet en gaf ie een error :?:

EDIT: Hij doet ut, het script was verkeerd afgesloten :P

Re: [php] Quote in een quote

BerichtGeplaatst: 12 feb 2009 13:41
door libia
je moet wel de puntjes backslashen!