好吧所以我在我的论坛上使用了一个小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]
只是
文字
感谢您的帮助!
亚历
答案 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);