如果标题不包含PHP中的字符,则使用正则表达式替换

时间:2014-09-08 17:08:50

标签: php regex bbcode

我正在为我的CMS完成BBCode支持。我使用正则表达式将BBCode转换为html,反之亦然。但是,我对安全性有一点问题。我有例如正则表达式:

~\[img=(.*?\.(?:jpg|jpeg|png))\|(.*?)\[/img\]~s

确定例如此

[img=somewhere.com\image\08-09-2014\cat.png|This is a cat[/img]

但它也适用于这样的字符串,但我真的不想这样做。

[img=somewhere.com" onclick="someBadJSCode()" src="\image\08-09-2014\cat.png|This is a cat[/img]

我认为这个正则表达式的编辑会有所帮助:

~\[img=([^"]+.*?\.(?:jpg|jpeg|png))\|(.*?)\[/img\]~s

但它实际上并没有,不知道为什么。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

感谢Casimir et Hippolyte,我得到了正则表达式,适用于url,alt和class部分,没有任何JS危险。

转换这个:

[img=somewhere.com/img.jpg|left]cat[/img]

到此:

<img src="somewhere.com/img.jpg" class="left" alt="cat" >

preg_replace方法的模式(1.参数)

~\[img=([^"']+\.(?:jpg|jpeg|png))\|([^"']+)\]([^"']+)\[/img\]~s

替换preg_replace方法(2.参数)

'<img src="$1" class="'.$this->GetElementClass('img').'  $2" alt="$3" >'