说我有
<script>alert("hello");</script><script>alert("world");</script>
如何删除</script><script>
,请记住中间可能存在或可能没有空格(</script> <script>
),如果其中一个脚本标记包含空格,我就不想这样做源属性(src
)设置。
这应该与尽可能多的脚本标记一起使用,因此如果连续三个遵循相同的要求,它将被转换为一个大的脚本标记。
答案 0 :(得分:2)
你声明可能有&#34; a&#34;空间。如果是这种情况,您有两种情况:</script><script>
和</script> <script>
。您可以使用空格轻松替换它们:
$html = str_replace('</script><script>',' ',$html);
$html = str_replace('</script> <script>',' ',$html);
但是,如果有很多空白怎么办?标签,换行符等......都加起来就是空格。你可以preg_replace(不用正则表达式解析HTML - 它只是替换一个明确定义的字符串)。
$html = preg_replace('~</script>\s*<script>~',' ',$html);
注意:如果第二个&lt; script&gt;实际上是&lt; script src =&#39; blahblahblah&#39;&gt;,它使用str_replace或preg_replace不匹配。这不是问题。
答案 1 :(得分:1)
使用
$pattern="/<script[^s>]*>\s*<\/script>/isU";
$html=preg_replace($pattern,"",$html);
模式查找没有src属性的脚本标记基本上我们发现它是否有内部,并删除该脚本打开和关闭标记分隔零或更多空间
答案 2 :(得分:0)
@ kainaw的答案是正确的,但我在这里有一个复杂的版本,你可以只允许一些标签,并返回它们之间存在的空间。
function remove_same_openclosed_tags($matches){
$allowed_tags = ['em', 'u', 'span', 'strong', 'script'];
if(in_array($matches[1], $allowed_tags) && $matches[1] == $matches[3] ) {
return $matches[2];
}
return $matches[0];
}
$content = preg_replace_callback("/<\/([a-zA-Z]+?)>(\s*)<([a-zA-Z]+?)>/is", 'remove_same_openclosed_tags' , $content);