HTML的转义文本


136

如何在C#中转义HTML使用的文本?我想要做

sample="<span>blah<span>"

并有

<span>blah<span>

显示为纯文本而不是仅使用html :(。的标签部分)。

c#  html  escaping 

Answers:



82

另外,如果您不想使用System.Web程序集,则可以使用以下方法:

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

这篇文章,之间的区别System.Security.SecurityElement.Escape(),并System.Web.HttpUtility.HtmlEncode()为前者还对单引号(')字符。


7
更不用说SecurityElement.Escape()逃脱不完全是HTML的XML了。
Victor Sergienko 2013年

Windows商店应用程序中不存在System.Security.SecurityElement
Tertium

47

如果您使用.NET 4级以上,你不想要的参考System.Web,您可以使用WebUtility.HtmlEncodeSystem

var encoded = WebUtility.HtmlEncode(unencoded);

这具有与相同的效果HttpUtility.HtmlEncode,应优先于System.Security.SecurityElement.Escape


为什么应该优先于SecurityElement.Escape?后者是否存在漏洞,或者前者是否更有能力?
特拉维斯

7
@Travis两者都没有漏洞,只是SecurityElement.Escape在XML和HtmlEncodeHTML 上运行,而XML和HTML编码的要求略有不同(有关详细信息,请参见此答案)。因此,例如,SecurityElement.Escape允许使用&apos;,而不允许使用HtmlEncode
亚历克斯

1
@Travis我认为更好的“借口”是System.Net可用于可移植类库,而其他两个选项似乎不在今天早上。; ^)
ruffin


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


我让这个问题更清楚了。我不希望标签成为html的一部分,因为用户可以这样做</ pre>并破坏它。

伟大的帖子,谢谢这个人,正是我一直在寻找的!
Spets

1
<xmp>已被弃用很久以前:stackoverflow.com/questions/8307846/...使用<pre>代替
mortb

1

在这里没看到这个

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

这是处理html时唯一起作用的(asp 4.0+)。在html中将其&apos;呈现为'(使用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>"));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.