html - 为什么 dec < 255 的 HTML 实体名称不需要分号?

标签 html html-entities behavior

在纯 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/

相关文章:

CSS:不包括行为

html - 新标签超链接到 PDF

html - 用线连接 div 以表示层次结构的最佳方式是什么?

c# - 如何将 UTF-8 转换为 HTML 实体中的文本?

wordpress - 阻止 WordPress 在 &lt;title&gt;&lt;/title&gt; 中使用 html 实体

c# - 如何将java嵌入到C#中

css - 由于 img 行为标签导致的多个 HTTP 请求

html - 如何创建如图所示的菜单? CSS样式

html - 日期选择器 html5 标签在 Mozilla、IE 浏览器上不工作。但它只适用于 Chrome

PHP htmlspecialchars 不工作