写 `&lt` 而不是 `<` 有缺点吗

Are There Downsides to Writing `&lt` Instead of `&lt;`

我最近了解到,在 HTML 中可以省略字符实体中的分号(例如 &lt 以创建 < 字符,而不是 &lt;).

我发现了一些非常老的 Stack Overflow 帖子,其中提到非常老的浏览器(例如 IE7)可能会遇到此类字符实体的问题。但是,无论是在网络上还是通过测试,我都无法在现代浏览器中找到此类字符实体的任何问题。

那么有什么理由不使用它们呢?

这完全取决于 browser/rendering 引擎想要的宽容度,而不是 HTML 的 属性。所有实体必须以分号结尾,否则语法无效。 WHATWG "HTML Living Standard" 混淆地认为这个分号是名称的一部分,使其在 Developer Edition 中看起来是可选的。但是完整的标准 text/W3C HTML5 草案更加清晰:"The name must be one that is terminated by a U+003B SEMICOLON character (;)."

从历史上看,当字符实体后面没有紧跟名称字符时,分号是可选的。例如,&pound? 会起作用,因为 ? 不是名称字符(即名称中允许的字符),但 &pound4 不会,因为 4 是名称字符,使得 pound4 未定义的实体名称。此规则是 HTML 中 SGML 遗产的一部分,是浏览器实际应用 SGML 特性的少数几件事之一。

话虽如此,用分号终止实体引用一直被认为是一种好的做法。 XML,因此 XHTML 使其成为强制性的。

这就是为什么当前的浏览器实践允许像“经典”HTML 中那样省略分号,但仅适用于表示 ISO Latin 1 字符(Unicode 数字小于十进制 256 的字符)的有限字符引用集或十六进制的 FF)。这是原始的实体引用集,因此此类引用在没有分号的情况下被广泛使用。所以这些做法是一种妥协:他们希望鼓励使用指定的符号,但不会使大量不符合要求的旧页面无效,从而使浏览器无法正确呈现它们。

HTML5 草案对此有不同的立场,但 HTML5 在所有情况下都需要分号,即使在 HTML 语法中也是如此。缺少分号被定义为解析错误,这意味着错误处理是明确的(实体应该被识别),但浏览器仍然可能在第一个解析错误时停止解析。

根据 W3C Recommendation

In SGML, it is possible to eliminate the final ";" after a character reference in some cases (e.g., at a line break or immediately before a tag). In other circumstances it may not be eliminated (e.g., in the middle of a word). We strongly suggest using the ";" in all cases to avoid problems with user agents that require this character to be present.

虽然 W3C Working Draft 表示

The ampersand must be followed by one of the names given in §8.5 Named character references section, using the same case. The name must be one that is terminated by a U+003B SEMICOLON character (;).

因为分号是 W3C 验证所必需的,而且它适用于所有浏览器,所以您应该使用它。通过不使用它们而节省的绝对微不足道的页面大小不值得冒它们不能在所有浏览器中正确显示的风险。

以下是关于此主题的类似问题的两个答案: Answer 1 Answer 2