BBCode [noparse]

Hi Community,

Wie bekomme ich es hin,
das bei der umwandlung des BBCodes zwischen [NOPARSE][NOPARSE][/NOPARSE][/NOPARSE] keine BBCodes umgewandelt werden?

Mein jetziger „BBCode-Interpreter“
[PHP]
function bbcode($content,$html = 0,$nl2br = 1)
{
if($html == 0)
{
$content = strip_tags($content);
}
$content = stripslashes($content);
$content = preg_replace(„#[url]http://(.?)[img]http://(.?)[/img][/url]#si“, „<a href="http://\1" target="_blank"><img src="http://\2" border="0">“, $content);
$content = preg_replace(„#[url]www.(.?)[img]www.(.?)[/img][/url]#si“, „<a href="http://www.\1" target="_blank"><img src="http://www.\2" border="0">“, $content);
$content = preg_replace(„#[url=http://(.?)][img]http://(.?)[/img][/url]#si“, „<a href="http://\1" target="_blank"><img src="http://\2" border="0">“, $content);
$content = preg_replace(„#[url=www.(.?)][img]www.(.?)[/img][/url]#si“, „<a href="http://www.\1" target="_blank"><img src="http://\2" border="0">“, $content);
$content = preg_replace(„#[url]http://(.?)[/url]#si", „<a href="http://\1" target="_blank">\1“, $content);
$content = preg_replace("#[url]www.(.
?)[/url]#si“, „<a href="http://\1" target="_blank">http://www.\1“, $content);
$content = preg_replace(„#[url=http://(.?)](.?)[/url]#si“, „<a href="http://\1" target="_blank">\2“, $content);
$content = preg_replace(„#[url=www.(.?)](.?)[/url]#si“, „<a href="http://www.\1" target="_blank">\2“, $content);
$content = preg_replace(„#[url=(.?)](.?)[/url]#si“, „<a href="\1">\2“, $content); // relativer link
$content = preg_replace(„#[url](.?)[/url]#si", „<a href="\1">\1“, $content); // relativer link
$content = preg_replace(„#(^|[^"=]{1})(http://|https://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm“,„\1<a href="\2\3" target="_blank">\3\4“,$content);
$content = preg_replace("#[email](.
?)[/email]#si“, „<a href="mailto:\1">\1“, $content);
$content = preg_replace(„#[email=(.?)](.?)[/email]#si“, „<a href="mailto:\1">\2“, $content);
$content = preg_replace(„#[size=(.?)](.?)[/size]#si“, „<font size="\1px">\2“, $content);
$content = preg_replace(„#[color=(.?)](.?)[/color]#si“, „<font color="\1">\2“, $content);
$content = preg_replace(„#[font=(.?)](.?)[/font]#si“, „<font face="\1">\2“, $content);
$content = preg_replace(„#[align=(.?)](.?)[/align]#si“, „<div align="\1">\2“, $content);
$content = preg_replace(„#
[quote]
#si“, „

Zitat:
“, $content);
$content = preg_replace(„#
[/quote]
#si“, „
“, $content);
$content = preg_replace(„#[b](.?)[/b]#si", „\1“,$content);
$content = preg_replace("#[i](.
?)[/i]#si“, „\1“,$content);
$content = preg_replace(„#[u](.?)[/u]#si", „\1“,$content);
$content = preg_replace("#[s](.
?)[/s]#si“, „\1“,$content);
$content = preg_replace(„#[pre](.?)[/pre]#si",„
\1
“, $content);
$content = preg_replace("#[list](.
?)[/list]#si“, „
    \1
“, $content);
$content = preg_replace(„#[list=1](.?)[/list=1]#si", „
    \1
“, $content);
$content = preg_replace("#[list=a](.
?)[/list=a]#si“, „<ol type="a">\1“, $content);
$content = preg_replace(„#[*](.*?)[/*]#si“, „
  • \1
  • “, $content);
    $content = preg_replace(„#[br]#si“, „
    “, $content);
    $content = preg_replace(„#[hr]#si“, „<hr noshade color="$border" size="1">“, $content);
    $content = preg_replace(„#[center]#si“, „“, $content);
    $content = preg_replace(„#[/center]#si“, „“, $content);
    $content = preg_replace(„~:)~isU“, „<img src="images/smileys/smile.gif">“, $content);
    $content = preg_replace(„~:D~isU“, „<img src="images/smileys/biggrin.gif">“, $content);
    $content = preg_replace(„~;)~isU“, ‚‘, $content);
    $content = preg_replace(„~8)~isU“, ‚‘, $content);
    $content = preg_replace(„~:eek:~isU“, ‚‘, $content);
    $content = preg_replace(„~:upset:~isU“,„<img src="images/smileys/boese.gif">“, $content);
    $content = preg_replace(„~:sigh:~isU“, ‚‘, $content);
    $content = preg_replace(„~:lampe:~isU“, ‚‘, $content);
    $content = preg_replace(„~:good:~isU“, ‚‘, $content);
    $content = preg_replace(„~:bad:~isU“, ‚‘, $content);
    $content = preg_replace(„~[fl:(.{2})]~isU“, ‚‘, $content);
    if($nl2br == 1)
    {
    $content = nl2br($content);
    }
    return($content);
    }
    [/PHP]

    sagt dir preg_replace_callback was?

    nein :frowning:

    Ich such mal ein bisschen darüber

    So in der Art:
    [php]
    preg_replace_callback(‚~[^[noparse](*)[/noparse]]~Modifier‘,‚bbcode‘,$content);
    [/php]
    Die Modifier must du noch anpassen

    Eine nicht regexp basierte lösung wäre es wenn du alle [ und ] zwischen den noparse tags zu begin duch ihre entity repräsentation ersetzt und ganz zum schluss zurück umwandelst. Dann übergeht dein parser sie weil für ihn nur ein zu sehen ist.

    ok danke euch beiden

    Ich werde ersteinmal die Lösung von Prophet benutzen, da ich bei preg_replace_callback noch nicht ganz so durchblicke ^^

    Trotzdem werde ich mich noch etwas weiter über preg_replace_callback informieren und etwas rumprobieren :slight_smile:

    Die Funktion wird dann mit einem Array aufgerufen.
    $content[1] enthält dann den treffer :wink: