我正在尝试解析php中的BBcodes,但我认为我的代码根本不安全。
$Text = preg_replace("(\[color=(.+?)\](.+?)\[\/color\])is","<span style=\"color: $1\">$2</span>",$Text);
我认为你可以通过这样的注射,它会起作用:
[color=<script>alert('gotcha');</script>]...[/color]
如何提高我的正则表达式,只捕获两种标准颜色格式:
[color=red]...[/color] OR [color=#FF0000]...[/color]
由于
答案 0 :(得分:3)
PHP实际上有built-in support for bbcode(虽然您需要安装PECL扩展程序)。
或者,您可以使用PEAR library HTML_BBCodeParser。
我建议使用上述解决方案之一,而不是编写自己的解决方案,因为它们已经过社区测试。
答案 1 :(得分:0)
(\[color=((([a-zA-Z])+)|(\#[A-F0-9]{1,6})))
我认为这是个主意,我的正则表达式有点生疏(抱歉)。
答案 2 :(得分:0)
如果你想编写自己的bbcode解析器,最好花一些时间为它写一个体面的Recursive descent parser。
这是因为您必须确保bbcode格式正确并嵌套,在代码中随机可能会破坏布局。您必须注意删除链接中的任何javascript://协议标识符。并采取只删除一次字符串以避免双重编码([b [b]加粗我[/ b]]我[/ b])。该列表继续进行,并且超出了简单的正则表达式以完全正确。