返回首页


{S0的},需要清理的HTML从quot在参加一个论坛,讨论; dangerousquot;结构上来。
在目前情况下,它需要从HTML源脚本,对象,小程序,EMBBED,框架集,IFRAME的,表格,输入,按钮和TEXTAREA元素(据我能想到的)。每一个事件的属性(的OnEvent)也应被删除,保留所有其他的属性,虽然。
HTML是非常宽松,非常硬解析。元素可以被定义为一个开始标签(LT;元素namegt ;)和结束标记(LT ;/的元素namegt ;)的,虽然有些元素不需要结束标记。如果XHTML被解析,没有结束标记的元素需要标记被终止,而不是只GT / GT;;
属性是不容易解析。由定义,属性值必须是由引号(')或双引号(quot ;)分隔,但有些浏览器接受没有任何分隔符的属性值。
我们可以建立一个解析器,但然后,它会成为昂贵的添加或删除元素或属性。使用删除不必要的元素和属性,似乎是最好的选择。
首先,让我们捕捉所有不必要的元素开始和结束标记。为了捕捉这些元素,我们必须: 捕获的开始标记字符元素的名称(我们将存储它的名字 - T):LT(LT; TGT;元素的名字吗?) 捕捉可选任何字符:空格(\ S *?)?拍摄结束标记字符:GT;捕捉可选任何字符:*?拍摄结束标记字符,元素的名称(名称引用 - T)和结束标记字符的开始标记字符:LT ;/ \康莱特注射液; TGT; GT;

<(?<t>tag-name(\s+.*?)?>.*?</\k<t>>

捕获所有不必要的元素类型,我们最终与下面的正则表达式:{C}
接下来,让我们捕捉所有不必要的元素没有结束标记。为了捕捉这些元素,我们必须: 捕获的开始标记字符元素的名称:LT;元素名称捕捉可选任何字符:空格(\ S *?)? 捕捉一个可选的结束标记字符:/?拍摄结束标记字符:GT;
<tag-name(\s+.*?)?/?>

捕获所有不必要的元素类型,我们最终与下面的正则表达式:{体C3}
要删除那些不必要的元素从HTML源,我们可以组合成一个以前这两个正则表达式和替换任何一个空字符串匹配:{的C4}
最后,不需要的属性。这是棘手的,因为我们想捕捉有害元素的开始标记内属性。为了实现这一目标,我们需要匹配元素的开始标记和捕获所有属性定义。为了捕捉这些属性,我们必须:比赛,但忽略任何元素名称的开始标记字符:(LT = <\ W?)匹配所有:唐,AOT捕捉强制用空格:(:\)捕获属性的定义:捕捉强制属性的名称:\ W捕捉强制性等于标志:=捕捉价值规范的形式之一: 捕获双引号的值:quot; [^"] *" 捕获单引号:'[^'] *'捕捉非上市的价值:*? 比赛,但忽略结束标记:?(= / GT ;){C5的}
与前面的正则表达式的问题是,它匹配的开始标记和捕获的属性,而不是每个不必要的属性本身的整个列表。这可以防止我们从每场比赛替换为一个固定值(空字符串)。
为了解决这个问题,我们要命名什么,我们要抓住和用{A}。
我们可以捕捉不必要的属性,因为我们做了有害元素,但我们需要从所有元素的属性列表中删除。相反,Äôll捕捉通缉属性,并建立属性列表。为了确定通缉的属性,我们Äôll需要将其命名为(一)。生成的代码会是这样的:{5233}
为了避免解析HTML源不止一次,我们可以组合成一个单一的一个正则表达式。
那里,因为我们仍然输出只通缉属性,AOS比赛计算器没有改变。
({A2的})几个选项也将被添加到增加功能和性能:IGNORECASE:大小写不敏感的匹配CultureInvariant:忽略语言中的文化差异多行:对于多行模式只有命名为捕捉捕获的ExplicitCapture:编译:对于正则表达式编译成一个程序集。只有当正则表达式是可以多次使用。
生成的代码会是这样的:{C7-}
这是没有广泛的测试,有可能是一些想要的HTML删除一些不必要的HTML保持,但是,AOS可能是一个很好的解决方案非常接近。{S1}

回答

评论会员:游客 时间:2012/02/05
cmschick:这篇文章可能会有所帮助,如果您需要使用正则表达式的一些指针,但有人建议,如果操纵HTML是你真的想要做什么用的HTMLAgilityPack:马克・布鲁克斯
{A3的}
http://musingmarc.blogspot.com
:马克・布鲁克斯:不要。认真对待。不知道。使用HtmlAgility包
评论会员:游客 时间:2012/02/05
马克・布鲁克斯:(表决的想法是,这是坏的,不执行和文章写作,这是罚款)http://musingmarc.blogspot.com
PedroMC |黑名单是一个坏的安全方法。而不是使用白名单。谁知道在未来会浮现什么危险标签
评论会员:游客 时间:2012/02/05
?DrABELL:非常好,实用