HTML を操作するためのツールとして、 CsQuery (私が主な作成者です) を見てください。
これは .NET jQuery ポートであり、クライアントで使用するのと同じメソッド (DOM および jQuery の API) を介して HTML への完全なアクセスを提供します。これにより、独自の消毒剤を簡単にロールアウトできます。
Rick Strahl は最近、HTML のサニタイズに関するブログ投稿を行いました。彼は、HTML Agility Pack を使用してルールでそれを行う方法を示しました。CsQuery を使用して同じことをより簡単に実現する方法を示すコメントをそこに投稿しました。tags の列挙を考えると、基本はこれだけです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 のイベント属性のクリーンアップなどについては、Ricks の投稿に詳細がありますが、基本的に CsQuery は、HTML を操作するための使い慣れた簡単な方法を備えたツールボックスです。必要な方法で機能するサニタイザーを簡単に作成できるはずです。
CsQuery の DOM モデルには、特定の名前付きスタイルを削除する必要がある場合に、スタイルに直接アクセスするためのメソッドも含まれています (たとえば、単に文字列を操作するよりも便利な方法で)。たとえば、すべての要素から「font-weight」スタイルを削除できます。
// 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 には十分なコメントが付けられているため、使い始めるとコードを簡単に変更できるはずです。
ただし、CsQuery に固有の非標準メソッド ("HasStyle" や "RemoveStyle" など) がいくつかあります。ただし、基本的な使用法は github の readme で十分にカバーされています。Nuget にもありCsQuery
ます。