Toon posts:

[php] UBB codes

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik weet 't, het is het zoveelste topic over UBB codes, ik heb erg veel gelezen erover dmv de search. Maar ik heb nog steeds niet de oplossing voor m'n probleem. Jammer genoeg.

Ik wil namelijk o.a. [_code] en [/_code] tags maken. Dit lukt wel, werkt ook aardig. Maar ik wil wel dat er geen andere tags binnen die [code] tags werken, dus als ik plaats (zonder underscore uiteraard):

[_code]f00 [_quote]blaat[/_quote] b4r[/_code]

Dat de [_code] en [/_code] tags dus gewoon werken, maar [_quote] en [/_quote] niet wordt omgezet naar een Quote, maar gewoon zichtbaar zijn als 2 quote tags.

Ik heb op dit moment, deze regex voor de code tags:
PHP:
1
<?$string = preg_replace("!\\[code\](.*?)\\[/code\]!s","", $string);?>

Alvast bedankt.

Verwijderd

Hoewel dit toch meerdere malen eerder is voorbijgekomen (maar ik kan de topics ook niet terug vinden). Je kunt het doen door de hele string te splitten op de [ code]/[ /code] tags. En dan elk even deel wel te parsen en elk oneven deel niet.

edit: Bijvoorbeeld:
code:
1
Dit is een test[ code]Dit moet dus [b]niet[/b] geparsed worden
En dit weer wel[/code]
Je splits dit met een een regex, bijvoorbeeld met preg_split:
code:
1
$parts = preg_split('/\\[\/?code\]/', $message);

Dan parse elke even $part wel en elk oneven $part niet. Daarna plak je ze weer achter elkaar.

Verwijderd

Topicstarter
Ik snap het ong. wel hoe je het doet. Maar waarom even en oneven? Als er nou bijv. 2 delen achter elkaar wel geparsed moeten worden, wat dan?

Of begrijp ik je nu helemaal verkeerd? En wil ik het op de verkeerde manier doen?

Verwijderd

Op zondag 17 maart 2002 13:41 schreef Markuz het volgende:
Ik snap het ong. wel hoe je het doet. Maar waarom even en oneven? Als er nou bijv. 2 delen achter elkaar wel geparsed moeten worden, wat dan?
Je begrijpt kennelijk niet wat je bereikt door de string te splitsen op die [/?code] tags? Stel je hebt de eerder gegeven tekst, en die splits je op. Dan krijg je dit:
$part[0] =
code:
1
Dit is een test

$part[1] =
code:
1
Dit moet dus [b]niet[/b] geparsed worden

$part[2] =
code:
1
En dit weer [b]wel[/b]

Wat valt je op? Welke delen moeten nu wel geparsed worden (met [ b] tags etc.)?
Juist, deel 0 en 2, laten dat nu altijd de even delen zijn.

Verwijderd

Topicstarter
Op zondag 17 maart 2002 13:45 schreef Zef het volgende:

[..]
Dan snap ik dan ook wel, maar wat nou als bijv. een deel wat wél geparsed moet worden, oneven is?

  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 27-08 21:32
Dat gebeurt dus niet, aangezien je 'wel-parsen'/'niet-parsen' stukken steeds om en om zitten. Het enige nadeel aan deze methode is dat je geen geneste code-tags kan gebruiken.

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


Verwijderd

Op zondag 17 maart 2002 14:11 schreef Johannes het volgende:
Het enige nadeel aan deze methode is dat je geen geneste code-tags kan gebruiken.
Klopt.

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
evenals het quoten van code, wat eigenlijk wel essentieel is.

Verwijderd

Op zondag 17 maart 2002 14:33 schreef brammetje het volgende:
evenals het quoten van code, wat eigenlijk wel essentieel is.
Hoezo zou dat fout gaan? Dat hangt van de rest van je code af hoor :P Hier werkt het wel :)

Ik valideer namelijk eerst de post (of alle geopende tags wel geopend zijn en andersom), er wordt pas daadwerkelijk gepost zodra dit zo is. Daarna kan ik veel simpelere (vaak str_replace) gebruiken voor elke 'halve' tag. (Bijvoorbeeld
en
apart, omdat ik toch de garantie heb dat hij afgesloten is).

Verwijderd

Topicstarter
Bedankt voor de hulp, het werkt min of meer al. Ik zie in ieder geval progressie ;)

Nu nog wel 1 probleempje...

Het is gelukt dat alles binnen [ code] niet wordt geparsed, en daar buiten wel. Maar... Nu wilde ik nog wel ff de [ code] tags replacen naar wat HTML, maar dit gaat niet...

De [ code] tags zijn nl uit $string gehaald, en de vraag is wat doe ik fout, of hoe krijg ik ze weer terug?

Dit is m'n (sloppy) code:
PHP:
1
<?$string = "Dit is een test[code]Dit moet dus [b]niet[/b] geparsed worden maar dit [b]N[/b]i[b]E[/b]t[/code]En dit weer [b]wel[/b].";$delen = preg_split('/\\[\/?code\]/', $string);$string = "";for($x = 0; $x < count($delen); $x++) {if($x%2 == "0") {$ubbcode = array("'\\[b\](.*?)\\[\/b\]'i","'\\[i\](.*?)\\[\/i\]'i","'\\[u\](.*?)\\[\/u\]'i","'\\[s\](.*?)\\[\/s\]'i","'\\[small\](.*?)\\[\/small\]'i","'\[me=44279](.*?)\\[\/me\]'i",);$html = array("<b>\\1</b>","<i>\\1</i>","<u>\\1</u>","<s>\\1</s>","<small>\\1</small>","<font color=\"#FF0000\">* \\1 \\2</font>");$delen[$x] = preg_replace($ubbcode,$html, $delen[$x]);}$string .= $delen[$x];$string = preg_replace("'\\[code\](.*?)\\[\/code\]'i","<p><b>Code:</b><br>\\1</p>", $string);}echo $string;?>

Alvast bedankt..

Verwijderd

"Code HTML" al tijdens het aan elkaar plakken invoeren en niet pas achteraf (het is even puzzelen, maar moet lukken).

Hier moet dus iets anders:
code:
1
$string .= $delen[$x];

Verwijderd

Topicstarter
Op maandag 18 maart 2002 16:26 schreef Zef het volgende:
"Code HTML" al tijdens het aan elkaar plakken invoeren en niet pas achteraf (het is even puzzelen, maar moet lukken).

Hier moet dus iets anders:
code:
1
$string .= $delen[$x];
Ik heb het gevoel dat die preg_split ze eruit zit te vissen...

En als ik de string in $delen[$x] gelijk uitprint na de preg_split, is dat ook zo...

Dus dan zou er iets fout moeten zitten in de preg_split (maar wat?) of er moet een andere functie moeten worden gebruikt (?)

Verwijderd

Op maandag 18 maart 2002 16:36 schreef Markuz het volgende:

[..]

Ik heb het gevoel dat die preg_split ze eruit zit te vissen...

En als ik de string in $delen[$x] gelijk uitprint na de preg_split, is dat ook zo...

Dus dan zou er iets fout moeten zitten in de preg_split (maar wat?) of er moet een andere functie moeten worden gebruikt (?)
Die preg_split doet niks fout, die splitst gewoon op [/?code] zoals je vraagt. Als je explode gebruikt:
code:
1
$parts = explode(" ", "hello this is a test");

bevat geen van de $parts toch nog een spatie? Vrij logisch dus :) En daar moet je ook niks aan veranderen, dat is nou eenmaal splitten :)

Verwijderd

Topicstarter
Ben explode(); gewend :)

Maar...

Hoe doe ik het dan wel? Je zegt net: $string .= $delen[$x]; ergens anders plaatsen, maar dat lijkt ook niet te gaan lukken als die split 'em eruit vist...

Verwijderd

Op maandag 18 maart 2002 16:48 schreef Markuz het volgende:
Je zegt net: $string .= $delen[$x]; ergens anders plaatsen, maar dat lijkt ook niet te gaan lukken als die split 'em eruit vist...
Nee, ik zeg niet dat het ergens anders moet, ik zeg dat het anders moet ;) Op een een of andere manier moet je daar je code html tussen moeten frutselen. Een mogelijke (maar foute) oplossing zou dit kunnen zijn:
code:
1
$string .= '<b>Code:</b><blockquote>'.$delen[$x];

Omdat je net zoals net, de ene keer een code tag opent en de andere keer sluit. (Weer dat even/oneven verhaal dus).

Verwijderd

Topicstarter
owkee...

Dan ga ik maar ff puzzelen ;)

Verwijderd

Gewoon mijn topic lezen, daar is het al beantwoord en daar staat de code al :

[topic=435081]

Verwijderd

Topicstarter
Hehe, het werkt eindelijk :)

Ik heb het misschien niet zo netjes opgelost, maar goed...

Ik heb voor de preg_split, de string een kenmerk gegeven waar tussen de code zit, en die kenmerk (kenmerk = [->] en [<-]). En die vervang ik later voor de HTML...

Dan nog een vraag: Kan dit problemen op leveren, zo ja, welke?

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
Op zondag 17 maart 2002 14:38 schreef Zef het volgende:
Hoezo zou dat fout gaan? Dat hangt van de rest van je code af hoor :P Hier werkt het wel :)
ok, ok..
Ik valideer namelijk eerst de post (of alle geopende tags wel geopend zijn en andersom), er wordt pas daadwerkelijk gepost zodra dit zo is. Daarna kan ik veel simpelere (vaak str_replace) gebruiken voor elke 'halve' tag. (Bijvoorbeeld
[...]
apart, omdat ik toch de garantie heb dat hij afgesloten is).
]
Mja, tis maar net wat je wilt.. Problemen krijg je dan wel weer als iemand gewoon [b] in zijn post wilt opnemen, en dit niet wil om laten zetten... met jou systeem mag dit niet eens gepost worden.. Verwarrend voor de gebruiker.

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Mijn parser (hier) is een recursieve versie.

Hij zoekt de bijbehorende tag en gooit wat daar tussen staat terug naar zijn eigen functie.

Betekent dat je een "niveau" mee kan geven aan de functie die aangeeft welke tags geldig zijn en welke niet. Hierdoor kan je bij een code tag zeggen dat geen een code meer mag voorkomen (zelfs de code tags zelf dus dan werkt {code}{code}{/code}{/code} wel ( vervang { en } door [ en ] uiteraard.)

[edit:] een "[" vergeten in de url

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Op maandag 18 maart 2002 17:13 schreef Markuz het volgende:
Dan nog een vraag: Kan dit problemen op leveren, zo ja, welke?
De methode die je gebruikt om toch nog die [ code] tags er in te plakken, of de manier waarop je alleen buiten die tags codes parsed?

Verwijderd

Topicstarter
Op maandag 18 maart 2002 17:16 schreef Zef het volgende:

[..]

De methode die je gebruikt om toch nog die [ code] tags er in te plakken, of de manier waarop je alleen buiten die tags codes parsed?
Allebei eigenlijk :)

Verwijderd

Op maandag 18 maart 2002 17:15 schreef brammetje het volgende:
Mja, tis maar net wat je wilt.. Problemen krijg je dan wel weer als iemand gewoon [b] in zijn post wilt opnemen, en dit niet wil om laten zetten... met jou systeem mag dit niet eens gepost worden.. Verwarrend voor de gebruiker.
Het is maar wat je verwarrend noemt, met HTML mag het ook niet, waarom zou het überhaupt mogen? Maar goed, de oplossing van dusty is natuurlijk nog mooier.

Verwijderd

Op maandag 18 maart 2002 17:17 schreef Markuz het volgende:

[..]

Allebei eigenlijk :)
Tja, of ooit ergens [<-] voor zal komen, dat kun je zelf net zo goed in schatten als ik ;)

Verder zijn nadelen van deze aanpak (voor het parsen van code tags) al wel genoemd: Geen [ code] tags nesten en verder hangt het nogal af van de rest van je codeparser.

Verwijderd

Topicstarter
[topic=435081]

Dat zal dan vast een betere manier zijn...

Bedankt voor de reply's, ben er eindelijk uitgekomen :)

Verwijderd

Op maandag 18 maart 2002 17:28 schreef Markuz het volgende:
[topic=435081]

Dat zal dan vast een betere manier zijn...

Bedankt voor de reply's, ben er eindelijk uitgekomen :)
Geen dank... veel plezier er mee, meld je me ff (ruud@phpjunk.nl) als jij jouw'n script af hebt en er een php converter in hebt, want dat php highlighten lukt niet echt.. alvast bedankt....
Pagina: 1