Я использую эту функцию для разбора BBcode:
function bbcode ($message) {
$search = array(
'@\[(?i)b\](.*?)\[/(?i)b\]@si',
'@\[(?i)i\](.*?)\[/(?i)i\]@si',
'@\[(?i)u\](.*?)\[/(?i)u\]@si',
'@\[color=rgb(.*?)\](.*?)\[\/color\]@si',
'@\[quote](.*?)\[\/quote\]@si',
'@\[li](.*?)\[\/li\]@si',
'@\[ul](.*?)\[\/ul\]@si',
);
$replace = array(
'<b>\\1</b>',
'<i>\\1</i>',
'<u>\\1</u>',
'<span style=\"color:rgb\\1\">\\2</span>',
'<span class=\"quote">\\1</span>',
'<li>\\1</li>',
'<ul>\\1</ul>',
);
return preg_replace($search , $replace, $message);
}
В большинстве случаев работает нормально, но не всегда.
Например:
[color=rgb(102, 0, 102)]H[color=rgb(204, 0, 0)]e[/color]llo[/color]
Результат:
<span style="color:rgb(102, 0, 102)">H[color=rgb(204, 0, 0)]e</span>llo[/color]
Как видите, только первый [color = ...] [/ color] был преобразован в html. Второй остается как есть. Есть идеи?