C#HtmlEncode - ISO-8859-1实体名称与数字

Hug*_*ron 10 .net c# string encoding iso

根据以下对ISO-8859-1标准,似乎有一个实体的名称,并保留每个HTML字符相关联的实体数量.

例如,对于角色é:

实体名称 : é

实体编号: é

同样,对于角色>:

实体名称 : >

实体编号: >

对于给定的字符串,HttpUtility.HtmlEncode返回一个HTML编码的String,但我无法弄清楚它是如何工作的.这就是我的意思:

Console.WriteLine(HtmlEncode("é>"));
//Outputs é>
Run Code Online (Sandbox Code Playgroud)

它似乎使用了é字符的实体编号,但是字符的实体名称>.

那么HtmlEncode方法真的适用于ISO-8859-1标准吗?如果确实如此,是否有理由说它有时使用实体名称而有时使用实体编号?更重要的是,我可以强制它可靠地给我实体名称吗?

编辑: 谢谢你们的答案.我执行搜索之前无法解码字符串.在没有太多细节的情况下,文本存储在SharePoint列表中,"搜索​​"由SharePoint本身完成(使用CAML查询).所以基本上,我不能.

我试图想出一种将实体数字转换为名称的方法,.NET中是否有一个函数可以做到这一点?还是其他任何想法?

Dar*_*rov 4

这就是该方法的实现方式。对于某些已知字符,它使用相应的实体,对于其他所有字符,它使用相应的十六进制值,并且您无法做太多修改此行为。摘录自实施System.Net.WebUtility.HtmlEncode(如反射器所示):

\n\n
...\nif (ch <= \'>\')\n{\n    switch (ch)\n    {\n        case \'&\':\n        {\n            output.Write("&amp;");\n            continue;\n        }\n        case \'\\\'\':\n        {\n            output.Write("&#39;");\n            continue;\n        }\n        case \'"\':\n        {\n            output.Write("&quot;");\n            continue;\n        }\n        case \'<\':\n        {\n            output.Write("&lt;");\n            continue;\n        }\n        case \'>\':\n        {\n            output.Write("&gt;");\n            continue;\n        }\n    }\n    output.Write(ch);\n    continue;\n}\nif ((ch >= \'\\x00a0\') && (ch < \'\xc4\x80\'))\n{\n    output.Write("&#");\n    output.Write(((int) ch).ToString(NumberFormatInfo.InvariantInfo));\n    output.Write(\';\');\n}\n...\n
Run Code Online (Sandbox Code Playgroud)\n\n

话虽如此,您不必关心,因为此方法将始终生成有效、安全且编码正确的 HTML。

\n