根据以下table对于ISO-8859-1标准,似乎有一个实体名称和一个实体编号与每个保留的 HTML 字符相关联。
例如,对于字符 é
:
实体名称:é
实体编号:é
类似地,对于字符>
:
实体名称:>
实体编号:>
对于给定的字符串,HttpUtility.HtmlEncode
返回一个 HTML 编码的字符串,但我不知道它是如何工作的。这就是我的意思:
Console.WriteLine(HtmlEncode("é>"));
//Outputs é>
它似乎对 é
字符使用实体编号,但对 >
字符使用实体名称。
那么 HtmlEncode 方法真的适用于 ISO-8859-1 标准吗?如果是这样,为什么它有时使用实体名称而有时使用实体编号是有原因的吗?更重要的是,我可以强制它可靠地给我实体名称吗?
编辑: 谢谢你们的回答。我无法在执行搜索之前解码字符串。无需深入了解太多细节,文本存储在 SharePoint 列表中,“搜索”由 SharePoint 本身完成(使用 CAML 查询)。所以基本上,我不能。
我正在想办法将实体编号转换为名称,.NET 中是否有函数可以做到这一点?还是有其他想法?
最佳答案
方法就是这样实现的。对于某些已知字符,它使用相应的实体,而对于其他所有字符,它使用相应的十六进制值,您无法修改此行为。 System.Net.WebUtility.HtmlEncode
的实现摘录(如反射器所示):
...
if (ch <= '>')
{
switch (ch)
{
case '&':
{
output.Write("&");
continue;
}
case '\'':
{
output.Write("'");
continue;
}
case '"':
{
output.Write(""");
continue;
}
case '<':
{
output.Write("<");
continue;
}
case '>':
{
output.Write(">");
continue;
}
}
output.Write(ch);
continue;
}
if ((ch >= '\x00a0') && (ch < 'Ā'))
{
output.Write("&#");
output.Write(((int) ch).ToString(NumberFormatInfo.InvariantInfo));
output.Write(';');
}
...
这就是说您不应该在意,因为此方法将始终生成有效、安全且正确编码的 HTML。
关于C# HtmlEncode - ISO-8859-1 实体名称与数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4853920/