login  Naam:   Wachtwoord: 
Registreer je!
 Forum

ubb QUOTE mag niet genest worden

Offline Wijnand - 20/08/2005 14:42 (laatste wijziging 20/08/2005 14:43)
Avatar van WijnandModerator Ik hoop dat ik de titel juist heb geschreven maar goed. Ik heb een reguliere expressie waarmee ik de informatie die tussen
Citaat:
en
staat verwerkt. Nu is het probleem....

als er bv
[quote2]
[quote2]
een quote van iemand anders.
[/quote2]
wat jij quote
[/quote2]

invul dat het helemaal gaar wordt.

Nu wil ik dus hebben dat met de bovenstaande voorbeeld dit wordt afgedrukt:

[quote2]
[old]..[/old]
wat jij quote
[/quote2]

dus dat hij alleen de buitenste quotes pak en de quotes die in die quote staan niet worden gepakt.

Ik heb nu deze reg expr (ik heb de code eromheen weggelaten omdat dit niet belangrijk is).

  1. <?php
  2. $m = preg_replace('/\[quote\](.*)\[\/quote\]/seU', "quote('\\1')", $m);
  3. ?>


ps. ik heb [quote2] gebruikt omdat anders SiteMasters hem oppakt als zijnde een quote.

8 antwoorden

Gesponsorde links
Offline Frederic - 20/08/2005 18:37
Avatar van Frederic PHP ver gevorderde Niet dat het een oplossing is maar...
euhm dat probleem is veelvoorkomend, ik heb het ook, en hier op SiMa is het ook bekend

Jan zei:
Citaat:
Ik dacht[quote]dat is netjes
maar je geloofde het niet[/quote]
Je kan het oplossing door via een replace scriptje de bestaande quote tags te wissen en [ \\ citaat // ] in de plaats te zetten, of verschillende quoteniveau's te gebruiken ([quote1=jan], [quote2=jos])
Offline Wijnand - 20/08/2005 23:43
Avatar van Wijnand Moderator Ja maar er is een oplossing voor, alleen de oplossing van phpbb is heel extreem lastig.
Offline Thomas - 21/08/2005 15:33
Avatar van Thomas Moderator Het pakken van de buitenste quotes werkt ook niet, omdat wanneer je meerdere quotes in een tekst hebt, de boel in de soep loopt, bijvoorbeeld in het volgende geval (ik gebruik hier even [q][/q] voor het gemak):

[q]quote 1[/q] gewone tekst [q]quote 2[/q].

Bij het pakken van de "buitenste quotes" zal dus het hele bovenstaande fragment worden gequote. Het probleem is dat reguliere expressies 'niet kunnen tellen' / niet kunnen zien/bijhouden hoeveel niveau's diep een expressie gaat. Een oplossing is gebruikmaking van een "stack-based UBB-parser" of een functie die controleert of een reeks van quotes goed is opgebouwd en deze dan omzet (deze laatste variant lijkt mij de makkelijkste).
Offline Wijnand - 21/08/2005 23:05
Avatar van Wijnand Moderator hmmmm, en heb jij er toevallig een voorbeeld van of een idee hoe ik dat moet opbouwen? Dus aan welke punten ik moet denken etc. Dat zou iig een boel helpen.
Offline Thomas - 22/08/2005 19:34
Avatar van Thomas Moderator Mja, het komt waarschijnlijk toch neer op het bouwen van een soort mini-parsertje, die met behulp van reguliere expressies of stringfuncties op een of andere manier bepaalt op welke (karakter)posities in een tekst er een quote geopend en/of gesloten wordt.
Met behulp van deze openings en sluitingsposities kun je dus de "buitenste quote-tags" van een tekst bepalen, en hier dan iets mee doen (deze weer aan een preg_replace voeren ofzo ).

Je zou alle openings- en sluitingstags in één haal uit een tekst kunnen halen door de tekst op te delen in allemaal "woorden", en dan deze woorden een voor een te gaan bekijken, maar dan begint het al heel veel op een stack-based parser (lees: compiler ) te lijken.

Wat je ook kunt doen (minder efficiënt, maar je wilt in de eerste plaats iets werkend, nietwaar ?) is eerst zoeken naar de openingstags van een quote, en hiervan de posities onthouden, en dan de tekst nog een keer doorlezen om hetzelfde te doen met sluitingstags.
Hierna zet je de startposities (van openings- èn sluitingstags) op volgorde, en zo zou je op elke moment (elke positie in je tekst) kunnen "tellen" hoeveel quote-blokken er open staan.

Ik hoop dat dit verhaal je een beetje op weg helpt.
Offline Wijnand - 22/08/2005 22:19
Avatar van Wijnand Moderator ik snap het, ik zal er eens flink overna gaan denken.

Maar stel dat ik ipv dit een stack-parser ga gebruiken, welke is dan makkelijk en gebruiksvriendelijk. Dan kan ik hiervan een beetje "afkijken" om ideeën op te doen.

trouwens, fangorn bedankt voor je tijd alvast 
Offline MFdriver - 22/08/2005 22:24
Avatar van MFdriver PHP interesse kijk gewoon naar de parser van phpBB 
Offline Wijnand - 23/08/2005 07:25
Avatar van Wijnand Moderator Ja maar als ik er eentje als het ware in een functie krijg dus zo:

$bericht = stack($bericht);

of iets dergelijks, dan is het goed aan te passen aan mijn site. Dus dat je de "lastige code" zeg maar binnen die functie houdt. En bij phpbb is dat volgens mij niet zo. Maar ik zal eens even kijken vanavond.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.222s