我使用這個功能的BBcode解析:BB碼分析問題
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]
正如你可以看到,只有第一[色= ...] [/色]已被轉換爲HTML。第二個保持原樣。有任何想法嗎?
如果你想要這樣的遞歸結構,你必須使用比普通的'preg_replace'更復雜的東西。正則表達式不能很好地處理層次結構。 – 2011-05-21 08:55:41
網上有數以百萬計的免費腳本,但我花了幾天時間,找不到一個好的bbcode解析器,它的工作沒有問題:( – tfe 2011-05-21 09:18:27