BB代码问题PHP

时间:2010-09-28 00:54:24

标签: php bbcode

好吧所以我在我的论坛上使用了一个小bbcode函数,运行良好,所以如果,例如,我把

[b]Text[/b]

它将以粗体显示文本。

我的问题是,如果我有这个代码:

[b]
Text[/b]

好吧它不会起作用,只是打印出来就像现在一样。

以下是我正在使用的函数示例:

function BBCode ($string) {
$search = array(
    '#\[b\](.*?)\[/b\]#',
);
$replace = array(
    '<b>\\1</b>',
);
return preg_replace($search , $replace, $string);
}

然后回应它:

.nl2br(stripslashes(BBCode($arr_thread_row[main_content]))).

所以我的问题是,什么是必要的,所以BBcode可以处理其中的所有内容,但不一定在同一条线上。

例如:

[b]




Text



[/b]

只是

文字

感谢您的帮助!

亚历

3 个答案:

答案 0 :(得分:2)

您需要multiline modifier,这使您的模式类似于#\[b\](.*?)\[/b\]#ms

(请注意尾随m

答案 1 :(得分:2)

实际上有一个pecl extension解析BBcode,它比你自己从头开始编写更快更安全。

答案 2 :(得分:0)

我用它......它应该有用。

$bb1 = array(
"/\[url\](.*?)\[\/url\]/is",
"/\[img\](.*?)\[\/img\]/is",
"/\[img\=(.*?)\](.*?)\[\/img\]/is",
"/\[url\=(.*?)\](.*?)\[\/url\]/is",
"/\[red\](.*?)\[\/red\]/is",
"/\[b\](.*?)\[\/b\]/is",
"/\[h(.*?)\](.*?)\[\/h(.*?)\]/is",
"/\[php\](.*?)\[\/php\]/is"
);

$bb2 = array(
'<a href="\\1">\\1</a>',
'<img alt="" src="\\1"/>',
'<img alt="" class="\\1" src="\\2"/>',
'<a rel="nofollow" target="_blank" href="\\1">\\2</a>',
'<span style="color:#ff0000;">\\1</span>',
'<span style="font-weight:bold;">\\1</span>',
'<h\\1>\\2</h\\3>',
'<pre><code class="php">\\1</code></pre>'
);

$html = preg_replace($bb1, $bb2, $html);