我无法使用 C# 从 HTML 页面中删除所有 javascript。我有三个正则表达式,它们删除了很多,但也错过了很多。使用 MSHTML DOM 解析器解析 javascript 会导致 javascript 实际运行,这是我试图通过使用正则表达式来避免的情况。
"<script.*/>"
"<script[^>]*>.*</script>"
"<script.*?>[\\s\\S]*?</.*?script>"
有谁知道我错过了什么导致这三个正则表达式错过 JavaScript 块?
我试图删除的示例:
<script src="do_files/page.js" type="text/javascript"></script>
<script src="do_files/page.js" type="text/javascript" />
<script type="text/javascript">
<!--
var Time=new Application('Time')
//-->
</script>
<script type="text/javascript">
if(window['com.actions']) {
window['com.actions'].approvalStatement = "",
window['com.actions'].hasApprovalStatement = false
}
</script>
我假设您正在尝试简单地清理 JavaScript 的输入。坦率地说,我担心这个解决方案太简单了,因为它看起来非常简单。请参阅下面的表达式(在 C# 字符串中)之后的推理:
@"(?s)<script.*?(/>|</script>)"
就是这样 - 我希望! (它当然适用于您的示例!)
我对简单性的推理是,尝试使用正则表达式解析 HTML 的主要问题是嵌套标签的可能性 - 与其说是不同标签的嵌套,不如说是同义标签的嵌套
例如,
<b> bold <i> AND italic </i></b>
……还不错,但是
<span class='BoldText'> bold <span class='ItalicText'> AND italic </span></span>
解析起来会困难得多,因为结束标签是相同的。
但是,由于嵌套无效script
标签,下一个实例/>
(</script>是该脚本块的结尾。
脚本标签内总是有可能存在 HTML 注释或 CDATA 标签,但如果它们不包含这些应该没问题</script>
。然而:如果他们这样做了,肯定有可能获得一些“代码”。我不认为页面会呈现,但有些 HTML 解析器非常灵活,所以你永远不知道。要处理一些额外的可能的空白,您可以使用:
@"(?s)<\s?script.*?(/\s?>|<\s?/\s?script\s?>)"
如果您能找到一种方法来破解它,让有效的 HTML 代码通过,请告诉我使用可运行的 JavaScript(我知道有几种方法可以获得some东西通过了,但如果它确实通过了,应该以多种不同的方式之一来破坏它,并且不应该是可运行的 JavaScript 代码。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)