login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Ubb parser

Offline Rens - 16/02/2006 19:40
Avatar van RensGouden medaille

Crew algemeen
Ik ben vandaag voor mezelf aan een UBB parser begonnen.
Het liep lekker, tot ik aan het stukje begon voor de code te highlighten.
Hij geeft de code netjes kleur zoals het hoort, maar als er nog een tag meer bij staat, word die niet weergeven.

Dus als je zoiets hebt:
Citaat:
[ code]blabla[/ code][ b]bold[/ b]

zal alleen de code worden weergeven, en het stuk tekst wat dikgedrukt hoort te zijn niet.

De code staat hier.
Weet iemand wat ik verkeerd doe?

7 antwoorden

Gesponsorde links
Offline kokx - 16/02/2006 19:54 (laatste wijziging 16/02/2006 20:20)
Avatar van kokx Onbekend Ik weet niet wat je verkeerd doet maar dit werkt volgensmij ook niet goed:
  1. function parse_code($sInvoer)
  2. {
  3. preg_match("#\[code\](.*?)\[\/code\]#si", $sInvoer, $aCode);
  4. $sInvoer = $this->regelnummers($aCode[0]);
  5. return $sInvoer;
  6. }

vervang dit door dit:
  1. function parse_code($sInvoer){
  2. $sInvoer = preg_replace("#\[code\](.*?)\[/code\]#ise", "\$this->regelnummers('\\1')", $sInvoer);
  3. return $sInvoer;
  4. }

anders wordt de code maar 1 keer geparsed [code ][/ code][code ][/ code] werkt dan niet

Edit: Ik denk dat dit het probleem wel oplost. Maar dit werkt bijvoorbeeld niet:
  1. [url=http://sitemasters.be]sima.be[/url]
  2.  
  3. [url]http://sitemasters.be[/url]

terwijl dit wel werkt:
  1. [url]http://sitemasters.be[/url]

Ik denk dat er nogal wat gesleuteld kan worden aan je class. En preg_match werkt maar 1 keer.
Offline Rens - 16/02/2006 23:20 (laatste wijziging 17/02/2006 11:48)
Avatar van Rens Gouden medaille

Crew algemeen
Hoe kom je erbij dat het volgende niet werkt?
  1. [url]http://sitemasters.be[/url]

Zet het net in het bestandje en het werkt gewoon hoor:s

En dat stukje van de code-tag, hij werkt nu:)
Bedankt.

edit; Van die urls had je ook helemaal gelijk in, het werkt inmiddels:)

edit2;
Hmmz, volgende foutje 

Zo gauw ik een \n ergens plaats, word die ook naar een nieuwe regel omgezet.
Iemand een idee hoe ik er voor kan zorgen dat de \n die een gebruiker intypt, niet naar een <br /> word geconverteerd?
Offline Thomas - 17/02/2006 12:56
Avatar van Thomas Moderator Code en tekst apart behandelen, of een parser schrijven .
Offline Richard - 17/02/2006 15:28
Avatar van Richard Crew algemeen Een echte stackbased-parser is natuurlijk altijd beter, maar wat je ook kunt doen is met preg_replace_callback placeholders maken en die aan het einde terugreplacen. Dan werkt het goed, en blijven smilies enzo er ook uit;)
Offline Thomas - 17/02/2006 15:47
Avatar van Thomas Moderator Of preg_replace met de /e switch. Dan kun je meteen de matches als n-de parameter meegeven aan een (zelf gedefinieerde) functie.
Offline kokx - 17/02/2006 16:39 (laatste wijziging 17/02/2006 16:46)
Avatar van kokx Onbekend als je de combinatie van [url=blabla ] en [url ] gebruikt werkt het niet. Want eerst wordt gekeken of er ergens [url= wordt gebruikt en dan wordt alleen de [url=blabla ]bla[/url ] geparsed. Je kunt wel kijken of iets niet wordt gebruikt maar niet of iets wel wordt gebruikt.

Edit: Had er ff naast gelezen maar heb nog wel een paar opmerkingen:

gebruik stripslashes (of een functie die ook controleerd of magic quotes gpc aanstaat) en op een of andere manier krijg je het voor elkaar om addslashes te gebruiken terwijl ik het niet zie.

gebruik highlight_string zo: $code = highlight_string($code, true); zo kan je het in een string zetten en wordt ook nl2br gebruikt. Dan hoef je namelijk niet te gaan kloten met buffers.
Offline Rens - 17/02/2006 17:36 (laatste wijziging 17/02/2006 17:58)
Avatar van Rens Gouden medaille

Crew algemeen
@kokx, kan wel zijn wat jij zegt, maar daarmee is mijn probleem niet verholpen:|

Over dat stackbased, iemand daar een tutorial o.i.d. over?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.207s