HttpUtility.HtmlDecode 返回相同的字符串

Len*_*ill 1 .net c# asp.net encode decode

这可能听起来像是一个特别愚蠢的问题,但在我的 asp.net 项目中,我用它HttpUtility.HtmlDecode来解码以下字符串:

string bar = HttpUtility.HtmlDecode("%3CFoobar%3E");
Run Code Online (Sandbox Code Playgroud)

但生成的字符串与之前的字符串完全相同。我究竟做错了什么?

Pet*_*ala 5

HttpUtility类支持两种类型的编码/解码

  • 网址
  • 超文本标记语言

您尝试使用 HTML 解码器解码 URL 编码的字符串。

使用 HTML 编码/解码

const string original = "<Foobar>";
string encoded = HttpUtility.HtmlEncode(original); //&lt;Foobar&gt;
string decoded = HttpUtility.HtmlDecode(encoded); //<Foobar>
Run Code Online (Sandbox Code Playgroud)

或者使用 URL 编码/解码

const string original = "<Foobar>";
string encoded = HttpUtility.UrlEncode(original); //%3CFoobar%3E
string decoded = HttpUtility.UrlDecode(encoded); //<Foobar>
Run Code Online (Sandbox Code Playgroud)

  • `HttpUtility.UrlEncode/Decode` 在用于编码部分 URI 时包含多个错误/怪癖(最明显的是将空格转义为 `+`,这不是标准的,应该仅用于表单编码数据),这些错误/怪癖已在 ` Uri.Escape/UnescapeDataString`,通常应该是首选。当然,除非您知道事物已使用“UrlEncode”进行编码,并且必须使用“UrlDecode”进行解码以保留怪癖,但这是不寻常的。(据我所知,“HtmlEncode/Decode”仍然没问题。) (2认同)