BB-code Parser setzt / vor Hochkommata!?

mrepox

Erfahrenes Mitglied
Hi Leutz,

ich benutze eine BBcode Klasse geschrieben von SEB aus dem Traum-Projekt Forum.

Problem bei dieser Klasse ist, das alle Hochkommata vom Parser mit backslashs versehen werden.
Die Regel für CODE scheint mir hier auch nicht in dieser Hinsicht korrekt aushgearbeitet worden zu sein.

Da mir die Funktionsweise von dem parsen total unklar ist, benötige ich von euch Hilfe bei der Änderung dieser Funktion.

Wäre super wenn ihr eine Idee dazu habt.

Hier der Code:

PHP:
<?php

function bbcode_replace($string)
{
    while($old_string != $string)
    {
        $old_string = $string;
      $string = preg_replace_callback('{\[(\w+)((=)(.+)|())\]((.|\n)*)\[/\1\]}U', 'bbcode_callback', $string);
      
    }

    return $string;
}


function bbcode_callback($matches)
{
    $tag = trim($matches[1]);
    $inner_string = $matches[6];
    $argument = $matches[4];
    
    switch($tag)
    {
        case 'b':
        case 'i':
        case 'u':
            $replacement = "<$tag>$inner_string</$tag>";
            break;
            
            case 'code':
            $replacement =  '<b>Code:</b><pre style="font-size:12px;width:450px;overflow:auto;">' . $inner_string . '</pre></div>';
            break;

        case 'TABLE':
            $replacement =  '<br /><span style="height: 10px;border-left:#8c8c8c 1px solid;border-top:#8c8c8c 1px solid;border-bottom:#8c8c8c 1px solid;padding:2px;background: #bdcbff; font-size: 0.9em;font-weight:bold;color: #626262;">Code:</span><span style="height: 10px;width: 50px;font-size: 0.9em;border-right:#8c8c8c 1px solid;border-left:#8c8c8c 1px solid;border-top:#8c8c8c 1px solid;border-bottom:#8c8c8c 1px solid;background:#e6ffcd;padding:2px;font-weight:bold;"><pre>' . $inner_string . '</pre></span><br />';
            break;
            
            case 'Summary':
            $replacement =  '<b>Auszug:</b><p style="background:#e4e4e4;width:500px;height:300px;overflow:auto; border:1px solid #8c8c8c;">' . $inner_string . '</p>';
            break;

        case 'color':
            $color = preg_match("[^[0-9a-fA-F]{3,6}$]", $argument) ? '#' . $argument : $argument;

            $replacement =  '<span style="color:' . $color . '">' . $inner_string . '</span>';
            break;

        case 'EMAIL':
            $address = $argument ? $argument : $inner_string;
            $replacement =  '<a href="mailto:' . $address . '">' . $inner_string . '</a>';
            break;

        case 'img':
            $replacement =  '<img src="' . $inner_string . '" />';
            break;

        case 'size':
            if (is_numeric($argument) && $argument > 5 && $argument < 64)
            {
                $replacement =  '<span style="font-size:' . $argument . 'px;">' . $inner_string . '</span>';
            }
            break;

        case 'QUOTE':
            $replacement =  '<b>Zitat:</b><hr />' . $inner_string . '<hr />';
            break;
            
        case 'LIST':
            $replacement =  '<ul><li>' . $inner_string . '</li></ul>';
            
            break;

        case 'url':
            $url = $argument ? $argument : $inner_string;
            $replacement =  '<a href="' . $url . '" >' . $inner_string . '</a>';
            break;


        default:    // unknown tag => reconstruct and return original expression
            $replacement = '[' . $tag . ']' . $inner_string . '[/' . $tag .']';
            break;
    }

	return $replacement;
}


?>
 
Also die magic_quotes_gpc ist auf on gestellt.

runtime ist off.

Kann man mit der Func. addslashes() bzw, stripslashes() etwas anfangen?
 
Zuletzt bearbeitet:
@Gumbo ich habe die Ausgabe nochmal durch stripslashes($ausgabe) laufen lassen, scheint zu gehen.
Hast du mit dieser Lösung irgendwelche Bedenken?

Gruß Markus
 
Zurück