Board Code
-
Hallo
ich schriebe zur Zeit (in PHP) einen eigenen Board Code Parser wie üblich für Foren vorhanden ist. Ich benutze hauptsächlich preg_replace, und funktioniert relativ gut, so ungefähr sieht es bei mir
<?php ... $reg = array( "/[code](.*)([\/code])/Use", "/[code (.*)](.*)([\/code])/Use", "/[php](.*)([\/php])/Use", "/[quote](.*)([\/quote])/Use", "/[quote (.*)](.*)([\/quote])/Use", "/[cpp](.*)([\/cpp])/Use" ); $chg = array( "table_parse('<code><br />' . trim('\\1') . '<br /> </code>', 'Code: ')", "table_parse('<code><br />' . trim('\\2') . '<br /> </code>', '\\1: ')", //"table_parse('<br />' . parse_PHP(reverse_htmlentities(trim('\\1'))) . '<br /> ', 'PHP Code: ')", "table_parse(highlight_string(reverse_htmlentities(trim('\\1')),TRUE), 'PHP Code')", "table_parse('<br />' . trim('\\1') . '<br /> ','$quote[$lang]: ')", "table_parse('<br />' . trim('\\2') . '<br /> ','$quote_von[$lang] \\1: ')", "table_parse('<br />' . parse_C(reverse_htmlentities(trim('\\1'))) . '<br /> ', 'C/C++ Code: ')" ); ... $reg = array_merge($reg, $reg1, $reg2); $chg = array_merge($chg, $chg1, $chg2); $content = preg_replace($reg, $chg, $content); ?>
wie gesagt, so funktioniert ganz gut, zumindest mit den meisten Tags außer mit quote-tags, da hab ich ein Problem. Wenn ich sowas habe wie
[quote-]xxx[/quote-] (hab jetzt extra die - eingefügt, damit nicht geparst wird) dann geht es schon, wenn ich aber nested-quote Tags hab
[quote-]xxx[quote-]yyyy[/quote-]zzz[/quote-] dann geht alles schief, weil preg_replace damit nicht klar kommt, denn das erste [/quote-] wird als End-Tag für das erste [quote-] und nicht für das zweite
Ich hab mich schon gefreut, dass alles geklappt hat, nun hab ich den Test damit gemacht und sehe, dass es doch nicht alles perfekt läuft.
Wie kann das ich das lösen? Ist es ne gute Idee reguläre Ausdrücke dafür zu haben? Wie sollte ich es am besten tun? Gibt es bereits geschriebene scripts, die sowas machen?
Danke
-
Ist zwar dirty, aber du könntest von innen heraus Schritt für Schritt die einzelnen Tags ersetzen
Aber es gibt hier sicher noch jemanden, der dir eine "richtige" Lösung oder zumindest einen besseren Tip geben kann
-
Inzwischen hab ich das hier gefunden http://www.christian-seiler.de/projekte/php/bbcode/index.html
sieht wirklich nicht schlecht aus.