BBCode nie przekształca całego teksetu

BBCode nie przekształca całego teksetu
Majcon
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Złoczew
  • Postów: 85
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

Kopiuj
[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

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

kod wygląda tak

Kopiuj
				$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]"));
dzek69
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.