看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