Gå til innhold

Hvordan lage BBCode


Anbefalte innlegg

(21:23:14) (*) det er galskap å bruke _replace-funksjoner til sånt

(21:23:33) (*) regular expressions burde vært forbudt

(21:23:47) (*) bruk string-funksjoner til å parse teksten

8487276[/snapback]

 

Så hvordan har du tenkt å mekke en god bbcode-parser uten bruk av regex eller noen form for _replace-funksjoner i det hele tatt? Ring meg når du finner en slik parser.

 

Men er enig med at regexer bør du holde deg unna for å sanitere f.eks. URL'er eller andre steder hvor en kan fort åpne seg for sikkerhetshull. Da bør en heller konsistent bruke htmlspecialchars(), strip_tags() og htmlentities().

 

Jobber i øyeblikket selv på en post-parser, som en del av Vikingboard-prosjektet. Der skal ikke bare bbcodes enkelt (og trygt) kunne byttes, men det skal også kunne være mulig å endre og legge til egne replace-regler uten å måtte kunne regex.

 

Eksempel på replace-regel:

'[url=:url:]:text:[/url]' => '<a href=":url:">:text:</a>'

 

Hvor så parseren senere bytter ut :text: og :url: med rette regex-mønstre, og assigner variabler på høyresiden. Koden ligger her, men husk på at det er work in progress, og langt ifra ferdig enda.

Lenke til kommentar
Videoannonse
Annonse

du lurte på hvordan man hentet ting fra en regexp?

 

alt som defineres innenfor parantes blir matchet for seg selv og kan bli backreferenced eller hentet fra et array.

 

eksempel..

 

$string = 'tekst[foo:bar]tekst';

#vi vil ha ut foo og bar

$pattern = '/[a-z]*\[([a-z]*):[a-z]*][a-z]*/';
$pattern2 = '/[a-z]*\[[a-z]*:([a-z]*)][a-z]*/';
$pattern3 = '/[a-z]*\[([a-z]*):([a-z]*)][a-z]*/';

ereg_match_all($pattern, $string, $matches);
print_r($matches);

pattern vil returnere et multiarray som inneholder hele matchen samt foo

pattern2 vil returnere et multiarray som inneholder hele matchen samt bar

pattern3 vil returnere et multiarray som inneholder hele matchen, foo og bar

 

dersom jeg ikke har gjort noen feil da.

 

det som er verdt å merke seg er parantesene.

 

anbefaller et program som heter regex coach. du finner det hvis du leter

Endret av grimjoey
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...