BBCode und htmlspecialchars

elmyth

Erfahrenes Mitglied
Guten Tag,

ich habe folgendes Problem:
Ich habe mir eine Funktiongeschrieben, welche den BBCode in in HTML-Tags usw. umwandelt, damit ich den Text formatiert ausgeben kann.
Nun möchte ich meine Seite aber auch gerne xhtml strict halten.
Dazu muss ich die URLs, welche u.a. "&"s enthalten mit htmlspecialchars() parsen.
Wenn ich jedoch den ganzen Text parse, werden nicht nur die "&"s zu "&amp;"s, sondern auch die html-tags (<, >) zu "&gt;" bzw. "&lt;". Also die Formatierung taugt nichts.
Wie kann ich das intelligenter anstellen, das sowohl die html-tags bestehen bleiben, jedoch auch die URLs html-strict werden?

Hier noch meine Funktion, bin natürlich auch für weitere Tipps offen ;)

PHP:
 function log_format($text)
	{
        $text = stripslashes($text);
        
        $text = preg_replace("/\[b\](.*?)\[\/b\]/isU","<b>$1</b>", $text);
        $text = preg_replace("/\[i\](.*?)\[\/i\]/isU","<i>$1</i>", $text);
        $text = preg_replace("/\[u\](.*?)\[\/u\]/isU","<b>$1</b>", $text);
        $text = preg_replace("/\[center\](.*?)\[\/center\]/isU","<center>$1</center>", $text);
        
        $text = preg_replace("/\[url\=\"(.*)\"\](.*)\[\/url\]/isU", "<a href=\"$1\">$2</a>", $text);

        $text = preg_replace("/\[e-mail\=\"mailto:(.*)\"\](.*)\[\/e-mail\]/isU", "<a href=\"mailto:$1\">$2</a>", $text);

        $text = preg_replace("/\[img\](.*)\[\/img\]/isU", "<img src=\"$1\" />", $text);
		
        $text = preg_replace("/\[box\](.*)\[\/box\]/isU", "<pre>$1</pre>", $text);

        $text = nl2br($text);
        
        
        return $text;
    }
 
Doofe Lösung, aber mach doch aus allen &amp; ein & und anschliessend aus allen & ein &amp;
So wird aus &amp; kein &amp;amp; aber ob das wirklich ne gute Lösung ist weiss ich nicht ;)
 
Man muss es dochgarnicht wieder in "&"s umwandeln ...
Geht ja nur um die URLs.

Hab das jetzt eingentlich sehr unschön gelöst, so wie ich es eigentlich nicht wollte:
PHP:
$text = str_replace("&","&amp;",$text);
 
Zurück