$str = <<<EOF
[div style=width:expression(alert(123))]百度1[/div]
[div style=width:70px]百度2[/div]
[div style=width:expre/*ssion(alert(123))]百度3[/div]
[div style=width:expressio]百度4[/div]
[div style=width:70]百度5[/div]
EOF;echo preg_replace(
array("/\[div\s+(style|class)=((?!expression).)*?\]/i"),
array("<div \\1=\"\\2\">"),$str);要求:除了百度1与百度2不解析之外,都解析成HTML代码
[div style=width:expression(alert(123))]百度1[/div]
[div style=width:70px]百度2[/div]
[div style=width:expre/*ssion(alert(123))]百度3[/div]
[div style=width:expressio]百度4[/div]
[div style=width:70]百度5[/div]
EOF;echo preg_replace(
array("/\[div\s+(style|class)=((?!expression).)*?\]/i"),
array("<div \\1=\"\\2\">"),$str);要求:除了百度1与百度2不解析之外,都解析成HTML代码
解决方案 »
- 请教PHP高手,下面这段如何解密?用什么软件加密的?
- php com 组件出错
- 请教代码覆盖率的问题
- zendstudio调试 装了zend,要调试还再次安装PHP环境吗?MySQL也要重装吗?
- The mysql extension is deprecated and will be removed in the future,这是什么原因啊?
- 求php zip打包2G以上文件或分卷压缩方法
- 用phpexcel输出excel时,页面嵌套怎么解决
- php如何实现两个数据中的表链接查询 ?
- 怎么获取省份和城市?
- 用dede做了一个网站,遇到一个用户权限问题,求助啊
- 关于充值合作给对方返回结果格式的问题
- discuz x2.0静态化地址的问题
这样呢:preg_replace('/\[(div style=width\:\w+)\](百度\d+)\[(\/div)\]/','<$1>$2<$3>',$str);
[div style=width:dsp;color:red]百度1[/div] 比如这样的字符串由于没有包含expression字符串,所以可以解析
$str = <<<HTML
[div style=width:expression(alert(123))]百度1[/div]
[div style=width:70px]百度2[/div]
[div style=width:expre/*ssion(alert(123))]百度3[/div]
[div style=width:expressio]百度4[/div]
[div style=width:70]百度5[/div]
HTML;echo preg_replace("#\[div\s+(style|class)=([^\]]*:(?!expression|(?:.*)\/\*).+)\](.*)\[/div\]#im","<div $1='$2'>$3</div>",$str);试试
就是修改discuz的ubb代码程序,不知道这位兄台是否做过另外请教一下为什么要使用#号,求解?
array("/\[div\s+(style|class)=((?!expression).)*?\]/i"),
array("<div \\1=\"\\2\">"),$str);我想通过这种格式的修改!可以吗?请帮忙修改下,谢谢!!
"/\s+(style|class)=(.*?)(expression|\*)(.*?)/i"直接替换掉带有expression和*的,CSS里面不能出现这两个东西我觉得就安全了!