HTMLのエスケープテキスト


136

C#でHTMLのテキストをエスケープするにはどうすればよいですか?私はやってみたいです

sample="<span>blah<span>"

そして持っている

<span>blah<span>

html :(。ASP。ではなくC#を使用するタグ部分がある場合にのみ、何の問題もなくプレーンテキストとして表示されます。

c#  html  escaping 

回答:


185
using System.Web;

var encoded = HttpUtility.HtmlEncode(unencoded);

3
:あなたはまた、非UnicodeにエンコードUnicode文字にしたい場合は、このチェックアウトstackoverflow.com/questions/82008/...
Gyuri

4
悪い方法を見つけたくないもの:上記のメソッド自体は制御文字をエスケープしません。ここで受け入れられた回答をご覧ください:stackoverflow.com/a/4501246/1543677そして両方を使用してください。
pkExec 14

HttpUtilityはもう存在しません(winストアアプリ)
Tertium

82

また、System.Webアセンブリを使用したくない場合は、これを使用できます。

var encoded = System.Security.SecurityElement.Escape(unencoded)

パーこの記事の差System.Security.SecurityElement.Escape()とは、System.Web.HttpUtility.HtmlEncode()前者はまた、アポストロフィコードすることがある(')文字が。


7
必ずしもHTMLではないXMLのSecurityElement.Escape()エスケープは言うまでもありません。
ビクターSergienko 2013年

System.Security.SecurityElementはWindowsストアアプリに存在しません
Tertium

47

.NET 4以降を使用していて、参照したくないSystem.Web場合はWebUtility.HtmlEncodeSystem

var encoded = WebUtility.HtmlEncode(unencoded);

これはと同じ効果がHttpUtility.HtmlEncodeあり、を優先する必要がありますSystem.Security.SecurityElement.Escape


SecurityElement.Escapeよりも優先する必要があるのはなぜですか?後者に脆弱性はありますか、それとも前者はもっと有能ですか?
Travis

7
@Travisどちらにも脆弱性はありませんSecurityElement.Escape。XMLでHtmlEncode動作し、HTMLで動作するだけであり、XMLとHTMLエンコーディングにはわずかに異なる要件があります(詳細についてはこの回答を参照してください)。したがって、たとえば、SecurityElement.Escapeは使用できますが&apos;HtmlEncodeは使用できません。
Alex

1
@Travisさらによい「言い訳」は、System.Netがポータブルクラスライブラリで利用可能であり、他の2つのオプションが今朝ではない、またはないようだということです。; ^)
ruffin 2016


6

.NET 4.0以降:

using System.Web.Security.AntiXss;
//...
var encoded = AntiXssEncoder.HtmlEncode("input", useNamedEntities: true);

5

実際のhtmlタグ<xmp>を使用して</xmp>、文字列をそのまま出力し、xmpタグの間にあるすべてのタグを表示できます。

または、サーバーServer.UrlEncodeまたはで使用することもできますHttpUtility.HtmlEncode


質問をより明確にしました。ユーザーが</ pre>を実行してタグを壊すことができるため、タグをhtmlの一部にしたくありません。

これは私が探していたものを正確に修正しました!
2015

1
<xmp>ずっと以前に非推奨になっています:stackoverflow.com/questions/8307846/…<pre>代わりに使用してください
mortb

1

これはここにはありませんでした

System.Web.HttpUtility.JavaScriptStringEncode("Hello, this is Satan's Site")

このようにhtmlを処理するときに機能したのはそれだけでした(asp 4.0以降)。&apos;表示されます'、それが失敗し、HTMLに(htmldecodeを使用します):

<a href="article.aspx?id=268" onclick="tabs.open('modules/xxx/id/268', 'It&apos;s Allstars'); return false;">It's Allstars</a>

1

HtmlEncodeによって削除されず、「」や「」のようにEdgeまたはIEで正しく表示されない特別な引用符文字があります。これらの文字を以下の関数のようなもので置き換えることができます。

private string RemoveJunkChars(string input)
{
    return HttpUtility.HtmlEncode(input.Replace("”", "\"").Replace("“", "\""));
}

おそらく間違ったエンコーディングを使用してコンテンツを提供しています。IEとEdgeは、そのような文字を表示するのに問題はありません。
ボーク

0

Razorページでこれを行う簡単な方法を将来的に探している人のために、以下を使用してください:

.cshtml:

@Html.Raw(Html.Encode("<span>blah<span>"))

.cshtml.cs:

string rawHtml = Html.Raw(Html.Encode("<span>blah<span>"));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.