答案 0 :(得分:6)
HTML5规范说明(我的重点):
评论必须以四个字符序列
U+003C LESS-THAN SIGN
,U+0021 EXCLAMATION MARK
,U+002D HYPHEN-MINUS
,U+002D HYPHEN-MINUS
(<!--
)开头。按照此顺序,评论可能包含文本,但附加限制是文本不能以单个>
(U+003E
)字符开头,也不能以U+002D HYPHEN-MINUS
字符开头({{ 1}})后跟-
(>
)个字符,也不包含两个连续
U+003E
个字符(U+002D HYPHEN-MINUS
),也不以
--
字符(U+002D HYPHEN-MINUS
)结尾。最后,评论必须以三个字符序列-
,U+002D HYPHEN-MINUS
,U+002D HYPHEN-MINUS
(U+003E GREATER-THAN SIGN
)结束。
这就是为什么它在抱怨。至于如何在不改变代码的情况下修复它,那就太棘手了。
你认为它的作用与C开发人员的想法完全不同,他们想知道为什么他们需要担心未定义的行为,因为他们编写的代码工作得很好。它在一个特定实现中工作正常的事实与可移植代码无关。
我的建议是实际更改代码。毕竟,它无效,并且任何浏览器(当前或未来)完全有权拒绝它。
在一些历史性的挖掘之后,似乎不允许这样做,因为HTML所基于的SGML对评论的规则略有不同。
在感知-->
令牌时,解析器切换到评论模式,其中评论中实际允许<!--
个字符。如果遇到>
序列,则会更改为--
将结束评论的其他模式。
事实上,它似乎是在这两种模式之间进行了切换,因此>
之类的内容是可行的,但<!-- >>>>> -- xyzzy -- >>>>> -->
会使>
结束评论。
一方面,XML没有采用这种行为,HTML现在已对其进行了修改,以便遵循“不要在评论中使用xyzzy
”。规则,原因是几乎没有人知道注释表现为SGML方式,造成一些痛苦: - )