我有很多网站是用 UTF-8 编码的。它们包含重音符号、带有波浪线的奇怪 n 以及各种有趣的东西。
当我尝试在任何文本编辑器中打开它们时,即使是将字符编码设置为 UTF-8 的 Notepad++,我也会看到一些奇怪的字符。
在我的浏览器中:
在文本编辑器中:
有人能解释一下这里发生了什么吗?
答案1
页面是使用实体引用(旧术语)或命名字符引用(HTML5 术语)编写的,它们是字符的特殊符号。在 UTF-8 编码的页面中,例如,您可以使用“ó”,但类似这样的引用ó
也是有效的,并且页面作者/开发人员可能出于各种原因(例如,不知道如何输入“ó”)更喜欢这样做。很多时候,实体的使用只是旧做法的遗留,在浏览器广泛支持 UTF-8 之前,这些做法曾经是必需的(在 1990 年代)。
这种表示法ó
使用起来完全安全,尽管它会使 HTML 源代码的可读性降低。例如,如果用户复制并粘贴文本,他会得到“ó”,因为它ó
仅存在于 HTML 源代码中;浏览器的 HTML 解析器会在内部将其转换为“ó”。
然而,一些引用是不安全的。一般来说,HTML 4.01 中定义的实体是安全的。(其中一些可能指的是由于字体问题而无法始终正确呈现的字符,但此类问题的存在与实体与字符本身的使用无关。)还有一组更大的HTML5 中的命名字符引用,而旧版浏览器通常缺乏对这些扩展的支持。
例如,ō
可能支持也可能不支持。如果支持,则显示为“ō”(带长音符号的 o);如果不支持(例如在 IE 9 及更早版本上),则按字面意思呈现。因此,使用字符本身或数字參考ō
。