转义HTML的文本

131 html c# escaping

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

sample="<span>blah<span>"
Run Code Online (Sandbox Code Playgroud)

并有

<span>blah<span>
Run Code Online (Sandbox Code Playgroud)

显示为纯文本而不是blah只与html的标签部分:(.使用C#而不是ASP

Mic*_*ter 179

using System.Web;

var encoded = HttpUtility.HtmlEncode(unencoded);
Run Code Online (Sandbox Code Playgroud)

  • 你不想找出坏道的东西:上面的方法本身并没有逃脱控制字符.请参阅此处接受的答案:http://stackoverflow.com/a/4501246/1543677并同时使用它们. (4认同)
  • 如果您还想将unicode字符编码为非unicode,请查看:http://stackoverflow.com/questions/82008/non-unicode-xml-representation (3认同)

Ter*_*ova 81

此外,如果您不想使用System.Web程序集,则可以使用此选项:

var encoded = System.Security.SecurityElement.Escape(unencoded)
Run Code Online (Sandbox Code Playgroud)

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

  • 不是说`SecurityElement.Escape()`转义为*XML*,它不完全是HTML. (6认同)

Ale*_*lex 44

如果您使用的是.NET 4或更高版本而您不想引用System.Web,则可以使用WebUtility.HtmlEncodefromSystem

var encoded = WebUtility.HtmlEncode(unencoded);
Run Code Online (Sandbox Code Playgroud)

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

  • @Travis两者都没有漏洞,只是`SecurityElement.Escape`在XML上运行,而'HtmlEncode`在HTML上运行,而XML和HTML编码的要求略有不同(参见[this answer](http:// stackoverflow. com/a/2083770/175157)详情).因此,例如,允许`SecurityElement.Escape`使用`'',而'HtmlEncode`则不允许. (7认同)

Nac*_*ica 19

没人提到,在ASP.NET 4.0中有新的语法来做到这一点.代替

<%= HttpUtility.HtmlEncode(unencoded) %>
Run Code Online (Sandbox Code Playgroud)

你可以干脆做

<%: unencoded %>
Run Code Online (Sandbox Code Playgroud)

在这里阅读更多内容:http: //weblogs.asp.net/scottgu/archive/2010/04/06/new-lt-gt-syntax-for-html-encoding-output-in-asp-net-4-and- ASP净MVC-2.aspx

  • 请给出 Razor 的语法?@Nacht (2认同)

Vic*_*tor 6

.NET 4.0及更高版本:

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


And*_*mer 5

您可以使用实际的html标记<xmp>并按</xmp>原样输出字符串,以显示xmp标记之间的所有标记.

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