[英]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.