login  Naam:   Wachtwoord: 
Registreer je!
 Forum

UBB Quote Parser

Offline Tuinstoel - 29/01/2009 15:13
Avatar van TuinstoelPHP expert Hoi. Ik heb nu ergens een stukje regex weggepikt om een fatsoenlijke quote mogelijkheid te maken. Nu stuit ik alleen op het probleem dat je niet vaker kan citeren op elkaar, dus dat de code stuk loopt.

  1. $s = preg_replace("#\[citaat\](.*?)\[/citaat\]#si","<div class=\"citaat\">\\1</div>",$s);
  2. $s = preg_replace("#\[citaat=(.*?)\](.*?)\[/citaat\]#si","<div class=\"citaat\"><h4>\\1</h4>\\2</div>",$s);


Wat ik dus wil bereiken is

[citaat][citaat][citaat]bla[/citaat]blaa2[/citaat]aight[/citaat]
maar dat lukt niet met deze code. Ik kan er zelf ook niet uitkomen omdat regex niet m'n sterkste punt is .

5 antwoorden

Gesponsorde links
Offline ranco - 29/01/2009 15:24
Avatar van ranco PHP gevorderde Ik heb het opgelost door de opening van een quote,en het einde van een quote op en aparte regel te vervangen.

Een voorbeeld hoe ik het heb opgelost. Hierdoor is nesting ook mogelijk:

  1. $Message = str_ireplace('[quote=','<div style="margin: 5px; margin-left: 10px; border: 1px solid; width:505px;"><div style="background-color: grey; height: 18px; padding-left: 5px; padding-top: 2px; width: 500px;">', $Message);
  2. $Message = str_ireplace('][name]', '<i> schreef:</i></div>', $Message);
  3. $Message = str_ireplace('[/quote]', '</div>', $Message);
Offline Tuinstoel - 29/01/2009 15:39
Avatar van Tuinstoel PHP expert Dat is niet de oplossing. Je kunt dan de boel namelijk flink verknooien door alleen [/quote] te plaatsen...
Offline ranco - 29/01/2009 15:44
Avatar van ranco PHP gevorderde Klopt, helemaal gelijk in. Maar als je direct na een quote je div afsluit, dan kan er ook nooit een andere quote in komen staan. Dat is weer de andere kant van het verhaal.

Een andere manier van degene die ik gebruik ken ik niet. Misschien dat iemand anders een geniale oplossing heeft voor de bug dat ontstaat wanneer je alleen [/quote] invoert?
Offline darsstar - 29/01/2009 17:41 (laatste wijziging 29/01/2009 19:25)
Avatar van darsstar Nieuw lid wat je zou kunnen doen is het aantal openings tags tellen met preg_match_all() (beide soorten openings tags wel in een apparte variabele zetten)
en dan preg_match() een limit meegeven


iets als dit: (ik heb deze code niet getest)
  1. $limit['simple'] = preg_match_all("#\[citaat\]#si",$s);
  2. $limit['advanced'] = preg_match_all("#\[citaat=(.*?)\]#si",$s);
  3.  
  4. $s = preg_replace("#\[citaat\]#si","<div class=\"citaat\">",$s,$limit['simple']);
  5. $s = preg_replace("#\[citaat=(.*?)\]#si","<div class=\"citaat\"><h4>\\1</h4>",$s,$limit['advanced']);
  6. $s = preg_replace("#\[/citaat\]#si","</div>",$s,$limit['advanced']+$limit['simple']);
Offline Tuinstoel - 29/01/2009 22:41
Avatar van Tuinstoel PHP expert Ik snap je bedoeling, de code werkt ook deels door een 3e parameter bij preg_match_all toe te voegen. Ik ga nog ff puzzelen om het helemaal correct te krijgen. In ieder geval al bedankt voor nu .
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.22s