尝试使用正则表达式解析 BBCode 时,点不将文本与换行符匹配
我正在为我的论坛使用一些 BBCode 解析功能。
当两个 b 标签之间的文本中没有换行符时,它效果很好。
[b]Text[/b]
它将以粗体打印文本。
但是,如果内部文本包含换行符,则无法正确替换。
[b]
Text[/b]
我的功能:
function BBCode ($string) {
$search = array(
'#\[b\](.*?)\[/b\]#',
);
$replace = array(
'<b>\\1</b>',
);
return preg_replace($search , $replace, $string);
}
然后当回显它时:
echo nl2br(stripslashes(BBCode($arr_thread_row[main_content])));
示例文本:
[b]
Text
[/b]
应该变成:
<b>
Text
</b>
I am using a little BBCode parsing function for a forum I have.
It works well when the text between two b tags has no newlines in it.
[b]Text[/b]
it will print Text in bold.
However, if the inner text contains a newline, it doesn't replace properly.
[b]
Text[/b]
My function:
function BBCode ($string) {
$search = array(
'#\[b\](.*?)\[/b\]#',
);
$replace = array(
'<b>\\1</b>',
);
return preg_replace($search , $replace, $string);
}
Then when echo'ing it:
echo nl2br(stripslashes(BBCode($arr_thread_row[main_content])));
Sample text:
[b]
Text
[/b]
Should become:
<b>
Text
</b>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
实际上有一个pecl扩展可以解析BBcode,这样会更快更安全而不是自己从头开始编写。
There is actually a pecl extension that parses BBcode, which would be faster and more secure than writing it from scratch yourself.
您需要 多行修饰符,它使您的模式变得更有价值就像
#\[b\](.*?)\[/b\]#ms
(注意尾随的
m
)You need the multiline modifier, which makes your pattern something like
#\[b\](.*?)\[/b\]#ms
(note the trailing
m
)我用这个...应该有用。
I use this... It should work.