simenss Skrevet 20. november 2006 Del Skrevet 20. november 2006 Jeg ønsker å konvertere BB-koder (slike vi bruker her på forumet) til HTML. En brukes skriver følgende tekst: svar 2 med quote fra svar 1 innlegg 1 [/quote ] svar 1 med quote fra innlegg 1 [/quote ][/i] Problemet som dukker opp er at quoten fra svar 1 også inneholder quoten fra innlegg 1. Altså: en quote er plassert innenfor en annen quote. preg_replace() gir da følgende tekst: svar 2 med quote fra svar 1 innlegg 1 svar 1 med quote fra innlegg 1 [/quote ][/i] Hvordan får jeg preg_replace() til å gjøre første og siste [/quote ] til en quote, og andre og nest siste [/quote ] til en quote osv.? Altså, gi brukeren mulighet til å sette en quote innenfor en annen quote og erstatte BB-koden slik at brukeren får denne teksten: svar 2 med quote fra svar 1 innlegg 1 svar 1 med quote fra innlegg 1 Lenke til kommentar
AlecTBM Skrevet 20. november 2006 Del Skrevet 20. november 2006 Hadde hvert fint med litt kode. Lenke til kommentar
Peter Skrevet 20. november 2006 Del Skrevet 20. november 2006 Jeg tror det enkleste her er rekursjon, da vil du automagisk holde orden på rekkefølgen av taggene. Hver gang du kommer til en åpningstag, fyrer du opp en ny instans av funksjonen som leser frem til første tag den finner. Dersom taggen er lukketag, så er funksjonen ferdig. (dvs. den gjør sin erstatning og returnerer), dersom den kommer til en ny åpningstag, fyrer av en ny instans til av seg selv. Lenke til kommentar
endrebjo Skrevet 20. november 2006 Del Skrevet 20. november 2006 (endret) Er ikke regex stort sett grådig da? Slik at den går til slutten av stringen og jobber seg tilbake igjen helt til den møter treff? Men da blir det kanskje litt problemer hvis du har flere quote-bokser som ikke er inni hverandre. Endret 20. november 2006 av endrebjorsvik Lenke til kommentar
Peter Skrevet 20. november 2006 Del Skrevet 20. november 2006 Du kan velge om den skal være grådig eller ikke. Tror det er "U"-modifier (ungreedy) Lenke til kommentar
AlecTBM Skrevet 21. november 2006 Del Skrevet 21. november 2006 Jeg har er fart at men må ha sI Prøvde sU men da kunne man kun ha 1 av hver bbkode. Lenke til kommentar
TorS Skrevet 21. november 2006 Del Skrevet 21. november 2006 U (PCRE_UNGREEDY) This modifier inverts the "greediness" of the quantifiers so that they are not greedy by default, but become greedy if followed by "?". It is not compatible with Perl. It can also be set by a (?U) modifier setting within the pattern or by a question mark behind a quantifier (e.g. .*?). Som det står i manualen. Men som Nazgul sier, tror jeg at rekursjon kan være det enkleste her. Lenke til kommentar
simenss Skrevet 22. november 2006 Forfatter Del Skrevet 22. november 2006 Koden er veldig enkel: function TextHTML($text,$bb_code) { $text = preg_replace('/&#/', '', nl2br(htmlentities($text, NULL, 'ISO-8859-15'))); // Håndterer feil i Opera if($bb_code) { $bb_code = array('/\[quote\](.+?)\[\/quote\]/is'); $html = array(''<blockquote>$1</blockquote>"); $text = preg_replace($bb_code, $html, $text); } return($text); } Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå