看CsQuery(这我是作为操作HTML的工具的主要作者)。
这是一个.NET jQuery端口,它通过您在客户端(DOM和jQuery的API)上使用的相同方法为您提供对HTML的完全访问。这使得推出自己的消毒剂非常容易。
Rick Strahl最近有一个blog post关于消毒HTML。他展示了如何使用HTML Agility Pack的规则来实现它,我发布了一条评论,展示了如何使用CsQuery更轻松地实现相同的功能。基本是仅此,给出的标签BlackList
枚举:
CQ doc = CQ.Create(html);
// creates a grouped selector "iframe,form,script, ..."
string selector = String.Join(",",BlackList);
// CsQuery uses the property indexer as a default method, it's identical
// to the "Select" method and functions like $(...)
doc[selector].Remove();
如果您不想在一些标签实际删除内容,例如也许格式化你想禁止的标签,你可以使用jQuery的解包。这将有删除标签,但保留其子女的影响。
doc[selector].UnWrap();
当你完成:
string cleanHtml = doc.Render();
有在里克斯后清理JavaScript事件属性,更重要的等等,但基本上CsQuery是一个熟悉而又简单的方式来操作工具箱HTML。应该很容易创建一种能够以您想要的方式工作的消毒剂。
CsQuery的DOM模型还包含方法来直接访问样式(例如,在不仅仅是操纵串更方便的方式),如果你需要做类似的东西删除某些指定的样式。例如,你可以从所有元素中删除“字体重量”的风格:
// use the [attribute] selector to target only elements with styles
foreach (IDomObject element in doc["[style]"]) {
if (element.HasStyle("font-weight")) {
element.RemoveStyle("font-weight");
}
}
CsQuery的主要缺点,现在是文档。它的API旨在尽可能地匹配浏览器DOM和jQuery(鉴于jQuery和C#之间的语言差异),并且公共API得到了很好的评论,所以它应该足够简单,以便在开始时进行编码。
但是有一些非标准方法(如“HasStyle”和“RemoveStyle”)是CsQuery独有的。不过,基本用法在github上的自述文件中涵盖得非常好。它也在Nuget上为CsQuery
。
[HTML整洁(http://tidy.sourceforge.net/)是旧的,但我已经成功使用过它。 – transistor1 2012-08-16 03:18:15
虽然我不确定这是我在找什么。这里的主要目标是确保用户输入不包含可执行脚本。 HTML Tidy看起来不错,但似乎有一个非常不同的目的。 – 2012-08-16 16:40:52