2016-11-17 65 views

回答

6

HTML5规范的状态(我的重点):

评论必须先从四个字符序列U+003C LESS-THAN SIGNU+0021 EXCLAMATION MARKU+002D HYPHEN-MINUSU+002D HYPHEN-MINUS<!--)。这个操作序列之后,注释可能有文字,有额外的限制,即文本不能以单一的>U+003E)字符开头,也不能用U+002D HYPHEN-MINUS字符(-),接着是>U+003E)字符开始,

也不包含两个连续U+002D HYPHEN-MINUS字符(--),

,也不与一个U+002D HYPHEN-MINUS字符(-)结束。最后,评论必须以三个字符序列U+002D HYPHEN-MINUS,U+002D HYPHEN-MINUS,U+003E GREATER-THAN SIGN-->)结束。

所以这就是为什么它抱怨。至于如何在不改变代码的情况下修复它,那更棘手。

对C开发人员来说,它的工作原理并没有什么不同,他们为什么需要担心未定义的行为,因为他们编写的代码工作正常。它在一个特定实现中正常工作的事实与便携式代码无关。

我的建议是实际更改代码。毕竟,这是无效的,任何浏览器(当前或未来)都可以完全拒绝它。


顺便后一些历史挖掘,看来这是不允许的,因为SGML,在其HTML为基础,有关于意见略有不同的规则。

在感应到<!--令牌时,解析器切换到注释模式,其中注释中实际允许使用>字符。如果遇到--序列,则它将更改为其他模式,其中>结束注释。

事实上,它似乎是这两种模式之间的切换开关,所以类似<!-- >>>>> -- xyzzy -- >>>>> -->是可能的,但将>放在xyzzy将结束评论。

XML为一体,没有采取这种行为,HTML现在已经修改了它遵循规则“并不在所有评论中使用--”,原因是,几乎没有人知道评论乖在SGML的方式,造成一些痛苦:-)

+1

同样的[XML评论](https://www.w3.org/TR/xml/#sec-comments);该标准引用了与SGML的兼容性作为原因。 – 2016-11-17 23:18:47

+0

感谢您的详细解答 –

相关问题