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

标签 c# .net string encoding iso

根据以下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("&amp;");
            continue;
        }
        case '\'':
        {
            output.Write("&#39;");
            continue;
        }
        case '"':
        {
            output.Write("&quot;");
            continue;
        }
        case '<':
        {
            output.Write("&lt;");
            continue;
        }
        case '>':
        {
            output.Write("&gt;");
            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/

相关文章:

c# - 如何重新初始化或重置类的属性?

c# - 如何获得 HLSL 计算的输出?

c# - 获取 List<T> 的现有实例

string - 序列比对

c - 如何在没有相同引用的情况下将文本文件中的字符串存储在 C 中?

javascript - 使用 asp.net 和母版页在 ListView 中维护回发时的滚动位置

javascript - 禁用的选中复选框未发送到表单提交时的模型

c# - ToList() 方法在哪里? (可查询)

c# - 如何从 VS 2010 部署安装项目安装到 Windows 7 中的公共(public)目录

Java Netbeans : Splitting a string using regular expressions