【发布时间】:2010-11-03 13:34:14
【问题描述】:
如何在 C# 中转义文本以供 html 使用?我想做
sample="<span>blah<span>"
并且拥有
<span>blah<span>
仅使用 html 的标签部分显示为纯文本而不是blah :(。 使用 C# 而不是 ASP
【问题讨论】:
如何在 C# 中转义文本以供 html 使用?我想做
sample="<span>blah<span>"
并且拥有
<span>blah<span>
仅使用 html 的标签部分显示为纯文本而不是blah :(。 使用 C# 而不是 ASP
【问题讨论】:
对于在 Razor 页面中执行此操作的简单方法,请使用以下方法:
在 .cshtml 中:
@Html.Raw(Html.Encode("<span>blah<span>"))
在 .cshtml.cs 中:
string rawHtml = Html.Raw(Html.Encode("<span>blah<span>"));
【讨论】:
有些特殊引号字符不会被 HtmlEncode 删除,并且不会在 Edge 或 Internet Explorer 中正确显示,例如 ” 和 “。您可以使用以下函数扩展替换这些字符。
private string RemoveJunkChars(string input)
{
return HttpUtility.HtmlEncode(input.Replace("”", "\"").Replace("“", "\""));
}
【讨论】:
你可以使用:
System.Web.HttpUtility.JavaScriptStringEncode("Hello, this is Satan's Site")
在处理这样的 HTML 时,这是唯一有效的方法(ASP.NET 4.0+)。 &apos; 在 HTML 内容中被渲染为 '(使用 htmldecode),导致它失败:
<a href="article.aspx?id=268" onclick="tabs.open('modules/xxx/id/268', 'It's Allstars'); return false;">It's Allstars</a>
【讨论】:
在 ASP.NET 4.0 中有新的语法可以做到这一点。而不是
<%= HttpUtility.HtmlEncode(unencoded) %>
你可以这样做
<%: unencoded %>
在这里阅读更多:
New <%: %> Syntax for HTML Encoding Output in ASP.NET 4 (and ASP.NET MVC 2)
【讨论】:
此外,如果您不想使用 System.Web 程序集,也可以使用它:
var encoded = System.Security.SecurityElement.Escape(unencoded)
根据this article,System.Security.SecurityElement.Escape() 和System.Web.HttpUtility.HtmlEncode() 之间的区别在于前者还编码撇号(') 字符。
【讨论】:
SecurityElement.Escape() 转义为 XML 这不完全是 HTML。
.NET 4.0 及以上版本:
using System.Web.Security.AntiXss;
//...
var encoded = AntiXssEncoder.HtmlEncode("input", useNamedEntities: true);
【讨论】:
如果您使用的是 .NET 4 或更高版本并且不想引用 System.Web,则可以使用来自 System 的 WebUtility.HtmlEncode
var encoded = WebUtility.HtmlEncode(unencoded);
这与HttpUtility.HtmlEncode 的效果相同,应该优先于System.Security.SecurityElement.Escape。
【讨论】:
SecurityElement.Escape对XML进行操作,HtmlEncode对HTML进行操作,XML和HTML编码要求略有不同(详见this answer )。因此,例如,SecurityElement.Escape 允许使用 &apos;,而 HtmlEncode 则不允许。
您可以使用实际的html标签<xmp>和</xmp>来输出字符串,以显示xmp标签之间的所有标签。
或者你也可以在服务器上使用Server.UrlEncode或HttpUtility.HtmlEncode。
【讨论】:
<xmp> 早已被弃用:stackoverflow.com/questions/8307846/… 改用<pre>
using System.Web;
var encoded = HttpUtility.HtmlEncode(unencoded);
【讨论】: