BBCode nie przekształca całego teksetu

0

Witam mam taki dość prosty kod do BBCode tylko jest mały z nim problem gdyż niestety nie zmienia on całego tekstu
Przykład

[b][color=ff0000](*VIP*)[/color][color=329696]Bla[color=ff0000]<3[/color][/color][b]

i teraz (VIP) jest kolorowy Bla jest kolorowe ale <3 i nie pogrubia
Dokładniej zwraca to

[b](*VIP*)<Bla[color=ff0000]<3>[/color][b]

kod wygląda tak

				$hm1 = array('#\[b\](.*?)\[/b\]#si', '#\[color=(.*?)\](.*?)\[/color\]#si');
				$hm2 = array('<b>\\1</b>', '<font color="\\1">\\2</font>');
				$nick = preg_replace($hm1, $hm2, htmlspecialchars("[color=ff0000](*VIP*)[/color][color=329696]Bla[color=ff0000]<3[/color][/color][b]"));
0

Miałem gdzieś kiedyś linka do długiego i konkretnego artykułu - dlaczego regexpy NIE NADAJĄ SIĘ do parsowania bbcode/html i podobnych.

W skrócie:

Entire HTML parsing is not possible with regular expressions, since it depends on matching the opening and the closing tag which is not possible with regexps.

Regular expressions can only match regular languages but HTML is a context-free language. The only thing you can do with regexps on HTML is heuristics but that will not work on every condition. It should be possible to present a HTML file that will be matched wrongly by any regular expression.

Jak chcesz parsować bbcode to skorzystaj z gotowych rozwiązań, np. polskiego autorstwa skrypt, podobno robi konkretną robotę:
http://forum.php.pl/klasa_Zaawansowany_parser_bbcode_php5_t115269.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1