在纯 HTML 文档中,£
(dec 163)呈现为 £ 而无需 ;
,而 &oelig
(dec 339) 只会呈现带有分号的 –。似乎每个十进制值小于 255 的 html 实体都将在不需要分号的情况下呈现,无论是在 FireFox 还是 Chrome 中。
什么给了?
最佳答案
原因是从历史上看,当实体引用(或字符引用)后面没有紧跟名称字符时,分号是可选的。所以 £?
可以,因为 ?
不是名称字符(即名称中允许的字符),但 £4
不是,因为 4
是一个名称字符,使 pound4
成为实体名称(在 HTML 中未定义,但有一天可能会定义)。此规则是 HTML 中 SGML 遗产的一部分,是浏览器实际应用 SGML 特性的少数几件事之一。
然而,用分号终止实体引用一直被认为是一种好的做法。 XML 以及 XHTML 甚至使其正式成为强制性的。
这就是为什么当前的浏览器实践允许在“经典”HTML 中省略分号,但仅适用于表示 ISO Latin 1 字符的有限字符引用集,即 Unicode 编号小于十进制 256(十六进制 FF)的字符.这是原始的实体引用集,因此此类引用在没有分号的情况下被广泛使用。因此,这些做法是一种妥协:他们希望鼓励使用推荐的表示法,但不会使大量旧页面无效,更不用说让浏览器无法正确呈现它们。
HTML5 草案对此有不同的立场,但例如2013 年 8 月 6 日起的 HTML5 CR 在所有情况下都需要分号,即使在 HTML 语法中也是如此。缺少分号被定义为 parse error ,这意味着错误处理是明确定义的(实体应该被识别),但是浏览器可能仍然会在第一次解析错误时停止解析!
关于html - 为什么 dec < 255 的 HTML 实体名称不需要分号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18689230/