正当なHTMLや無効なHTMLを含む可能性のあるメッセージ内のすべての平文を出力する必要があります(例:< why would someone do this?? >
のような<...>
のHTML以外のテキスト)。メッセージから安全にHTMLを削除する
すべてのHTML以外のコンテンツを保存することが重要です。すべてのHTMLを削除するよりも、できるだけ多くのHTMLを読みやすくすることが理想的です。
私は現在、HTML敏捷性パックを使用していますが、私はまた、例えば、削除された非HTML <
と>
内の問題が午前:
私の機能:
text = HttpUtility.HtmlDecode(text);
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(text);
text = doc.DocumentNode.InnerText;
簡単な例入力を* :
0123:this text has <b>weird < things</b> going on >
実際の出力は(受け入れられない、単語 "の事を" 失われました)
this text has weird going on >
所望の出力:
this text has weird < things going on >
は<
および/または>
を含むことができ、他のコンテンツを除去することなく、HTMLの敏捷性パックの中にのみ、正当なHTMLタグを削除する方法はありますか?または、this questionのように削除するタグのホワイトリストを手動で作成する必要がありますか?それは私の代替ソリューションですが、私は見つけられなかったHTMLアジリティパック(または別のツール)に組み込まれたより完全なソリューションがあることを願っています。
*(実際の入力は、多くの場合、その中に不要なHTMLのトンを持っていることが有用であろうと、私は長い一例を与えることができます)
壊れたHTMLを扱うときには、欠陥があります。 HTMLAgilityPackがHTMLコンテンツの一部として '事物 'を解釈することは驚くことではありません。ライブラリは、HTMLが有効でない場合にヒューリスティックを使用して推測しなければならず、それらのヒューリスティックは完全ではありません。たとえあなたがケビンの答えのようにあなた自身のパーサを書くとしても、あなたはもっと良くなることはありません。 – Amy
私は正規表現 '/ <[^>]> /'がタグを見つけて削除する良い方法であることを発見しました。だから 'Regex.Replace(input、" <[^> ">、" ")'は良いスタート地点にすべきです。それでも可能であれば、HTMLの解析を完全に避ける方が良いでしょう。 –