gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:11:21 25 4
gpt4 key购买 nike

根据以下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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com