为什么HTML注释中双短横线无效?

13

标准模式HTML在注释中禁止双连字符

<!-- This is a perfectly valid comment - I think. -->
<!-- Invalid comment -- definitely. -->

有三个额外的限制,这些无效的示例是例证:

<!--> invalid -->
<!---> invalid -->
<!-- invalid --->

为什么要指定所有这些小的边缘情况?特别是为什么要禁止使用双连字符?


1
因为这是一个有效的注释 <!-- valid html comment -- > - Cheery
3
这个来自XML,我想。如果我没记错的话,这个设计的理念是为了允许在解析时仅通过查看当前字符后面一个字符来完成解析。编辑:我不确定我是否记得正确。不确定我从哪里得到的这个信息 :-) - Cameron
3
有趣的是,在最新版的Chrome和Firefox浏览器中,<html><body><p>This is a test...<!-- Invalid comment -- definitely. -->of the emergency broadcast system.</p></body></html>呈现为*This is a test...of the emergency broadcast system.*,并且显示效果良好。 - J0e3gan
1
@J0e3gan,所有类型的无效标记都会正确呈现...但这并不意味着它是有效的。 - MikeSmithDev
通常无效性是在实践中被发现的。具有讽刺意味的是,它实际上在实践中起作用。不管怎样,简单的网络搜索就能找到答案...在SO上。 - J0e3gan
1个回答

14

[定义:注释可以出现在文档中其他标记之外的任何位置;此外,它们可以出现在文档类型声明中语法允许的位置。它们不是文档的字符数据;XML处理器可以但不必使应用程序能够检索注释文本。为了兼容性,在注释中不得出现字符串“--”(双破折号)。]参数实体引用不能在注释中被识别。

该语法不允许以"--->"结束的注释。

看起来,这是XML的一个特性,仅仅是为了确保XML与SGML兼容。http://www.w3.org/TR/REC-xml/#sec-comments


2
这是一个很好的答案。HTML5需要尝试成为XML注释语法、SGML注释语法和浏览器支持的注释语法的共同子集,这三者都不同。在这三者中,SGML可能是最不重要的,因为浏览器从未正确支持过SGML注释语法(尽管验证器支持)。但是,生成的产品确实应该在SGML解析器中工作。 - thomasrutter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接