繁体   English   中英

PHP 正则表达式删除所有 javascript 异常

[英]PHP regular expression to remove all javascript with exception

我正在寻找一种从 html 字符串中删除所有 JavaScripts 标签的方法。

以下正则表达式工作正常,但我想添加一个例外:

$html = preg_replace('#<script[^>]*>.*?</script>#is', '', $html);

我如何添加一个规则以使 text/html 类型的脚本被忽略?

<script type="text/html" ... > ... </script> 

有什么建议吗?

提前致谢。

您可能不会尝试清理不受信任的 HTML,但只是为了让这个问题的读者不要误会:

这不会删除<script>元素之外的 javascript : <img src=bogus onerror=alert(42)>

它不会删除几乎没有混淆的脚本: <script>alert(42)</script >

它将无效内容转换为脚本: <scrip<script></script>t>alert(42)</script>

我不是说这是你想要做的。 您可能有非常充分的理由这样做,而与不受信任的输入无关,但是,对于以后的读者,不要尝试仅使用正则表达式来推出您自己的 HTML 清洁剂。

使用不会落入 Mike 指针的贪婪匹配,如下所示:

$html = preg_replace('#<script.*</script>#is', '', $html);

这应该(贪婪地)匹配所有脚本标签。 至于例外,我不知道该怎么做,对不起。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM