使用Regex删除JavaScript
我在使用C#从HTML页面删除所有javascript时遇到问题。 我有三个正则表达式删除了很多,但也错过了很多。 使用MSHTML DOM解析器解析javascript会导致javascript实际运行,这正是我试图通过使用正则表达式来避免的。
"" "]*>.*" "[\s\S]*?"
有谁知道我错过了什么导致这三个正则表达式错过了JavaScript块?
我想要删除的一个例子:
if(window['com.actions']) { window['com.actions'].approvalStatement = "", window['com.actions'].hasApprovalStatement = false }
我假设您正在尝试简单地清理JavaScript的输入。 坦率地说,我担心这个解决方案太简单了,因为它看起来非常简单。 在表达式(在C#字符串中)之后,请参阅下面的推理:
@"(?s) |)"
就是这样 – 我希望! (这当然适用于你的例子!)
我对简单性的推理是,试图用正则表达式解析HTML的主要问题是嵌套标签的可能性 – 它不是DIFFERENT标签的嵌套,而是SYNONYMOUS标签的嵌套
例如,
bold AND italic
……并不是那么糟糕,但是
bold AND italic
解析会更难,因为结束标记是IDENTICAL。
但是,由于嵌套script
标记无效,因此/>
(<-is this valid?)或的下一个实例是此脚本块的结尾。
脚本标记内总是存在HTML注释或CDATA标记的可能性,但如果它们不包含则应该没问题。 但是:如果他们这样做,肯定有可能获得一些“代码”。 我不认为页面会呈现,但是一些HTML解析器非常灵活,所以你永远不会知道。 要处理一些额外可能的空格,你可以使用:
@"(?s)|)"
请告诉我你是否可以找到一种方法来打破它,通过可运行的JavaScript让VALID HTML代码通过 (我知道有一些方法可以通过一些东西,但它应该被打破在许多不同的如果它通过的方式,并且不应该是可运行的JavaScript代码。)
人们普遍认为尝试使用正则表达式解析HTML是一个坏主意,并会产生不良结果。 相反,您应该使用DOM解析器。 jQuery在浏览器的DOM周围很好地包装,并允许您非常轻松地删除所有标记。
如果这样做是为了防止跨站点脚本,那么创建自己的HTML解析器或脚本检测器是一个特别糟糕的主意。 手动执行此操作是一个非常糟糕的主意,因为可以使用任何数量的角落案例和技巧来击败此类尝试。 这被称为“黑名单”,因为它试图从HTML中删除不安全的项目,而且它几乎注定要失败。
使用白名单处理器(例如AntiSamy )更安全,它只允许批准的项目通过自动转发其他所有内容。
当然,如果这不是您正在做的事情,那么您应该编辑您的问题以提供更多背景信息……
编辑:
现在我们知道您正在使用C#, 请按照此处的建议尝试HTMLAgilityPack 。
你使用哪种语言? 作为一般声明,正则表达式不适合解析HTML。
如果您使用的是.net平台,则HTML Agility Pack会提供更好的解析器。
您应该使用真正的html解析器来完成这项工作。 这就是说,简单的剥离
脚本块你可以使用如下的基本正则表达式。
这个想法是你需要一个回调来确定捕获组1是否匹配。
如果是这样,回调应该传回隐藏html(如注释)的东西
通过不变,脚本块作为空字符串传回。
但这并不能代替html处理器。 祝好运!
搜索正则表达式:(修饰符 – 扩展,全局,包括点中的换行符,回调函数)
(?:
替换func伪代码:
string callback () { if capture buffer 1 matched return capt buffer 1 else return ''
}
好吧,当我需要从任何可能的javascript中清除“富文本”(带有HTML格式的文本)时,我遇到了类似的情况。
有几种方法可以将JavaScript添加到HTML:
这就是我现在所能想到的。
因此,需要从这3个案例中清除提交的HTML代码。 一个简单的解决方案是使用Regex查找这些模式,并用“”替换它们或者做任何你想做的事情。
这是一个简单的代码:
上述就是C#学习教程:使用Regex删除JavaScript分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public static string CleanHTMLFromScript(string str) { Regex re = new Regex("
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1013790.html