HTML 的转义文本

如何在 C # 中为 html 使用转义文本? 我想做什么

sample="<span>blah<span>"

并且

<span>blah<span>

显示为纯文本,而不仅仅是带有 html: (。 使用 C # 而不是 ASP

138304 次浏览

可以使用实际的 html 标记 <xmp></xmp>输出字符串,以显示 xmp 标记之间的所有标记。

或者也可以在服务器 Server.UrlEncodeHttpUtility.HtmlEncode上使用。

using System.Web;


var encoded = HttpUtility.HtmlEncode(unencoded);

另外,如果不想使用 System.Web程序集,也可以使用这个函数:

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

对于 这篇文章System.Security.SecurityElement.Escape()System.Web.HttpUtility.HtmlEncode()的区别在于前者也编码撇号 (')字符。

在 ASP.NET 4.0中有新的语法来做这件事

<%= HttpUtility.HtmlEncode(unencoded) %>

你可以简单地做

<%: unencoded %>

点击这里阅读更多:

ASP.NET 4(和 ASP.NET MVC 2)中 HTML 编码输出的新 <% :% > 语法

如果您正在使用.NET 4或更高版本,并且您不想引用 System.Web,那么您可以从 System中使用 WebUtility.HtmlEncode

var encoded = WebUtility.HtmlEncode(unencoded);

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

你可使用:

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

这是唯一一个在处理这样的 HTML 时有效的方法(ASP.NET 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>

.NET 4.0及以上版本:

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

有些特殊的引号字符不会被 HtmlEncode 删除,也不会在 Edge 或 Internet Explorer 中正确显示,比如 。您可以扩展使用下面的函数来替换这些字符。

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

要在 Razor 页面中实现这一点,可以使用以下方法:

在. cshtml 中:

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

在. cshtml.cs 中:

string rawHtml = Html.Raw(Html.Encode("<span>blah<span>"));