【发布时间】:2012-09-07 05:04:20
【问题描述】:
参考这个问题的公认答案:ASP.NET - What Characters does Server.HtmlEncode Encode into Named Character Entities
这里引用了HtmlEncode的源码。我对以下几行有疑问:
if ((ch >= '\x00a0') && (ch < 'Ā'))
{
output.Write("&#");
output.Write(ch.ToString(NumberFormatInfo.InvariantInfo));
output.Write(';');
}
基本上,这会将所有字符从&nbsp;(ASCII 代码 127)转换为 ÿ(ANSI 代码 255)到其实体编码表示 (
不过,所有 ansi 代码高于 255 的字符都按原样写入输出。
有人知道这种 ANSI 127 - 255 编码背后的原理吗?有一个网页看起来有点傻,在 utf-8 中,源代码看起来像
"Søk:"
而不是
"Søk:"
(“Søk”是挪威语的“搜索”)。
【问题讨论】:
-
“在幕后看起来不傻”不是 HTML 编码试图解决的问题 - 它是为了明确表示内容。只有“扩展 ascii”的范围不明确; 255 以上的字符代码 根本不是 ascii。
-
我完全不明白为什么提到 ASCII。这里没有 ASCII:C# 字符串是 Unicode,而 HtmlEncode 适用于这些 Unicode 字符串。
-
@Codo:ANSI 可能更正确,但 8 位 ASCII 是一个广泛使用的术语,尽管在技术上不是 100% 正确。我编辑了原始问题。我当然是在谈论 8 位字符集,例如 iso8859-1(又名 latin-1)等。
-
@Dan Puzey, "extended ascii", or ansi, 或任何我们想称呼它们的东西,如果你用 http/html 响应发送正确的字符编码,例如:Content-Type :文本/html; charset=ISO-8859-1
-
@ErikA.Brandstadmoen:好点,虽然问题确实特别提到了“utf-8 中的网页”。
标签: c# asp.net-mvc html-encode