为什么sublime会考虑<!-------(多个破折号)语法错误

时间:2016-11-17 23:10:10

标签: sublimetext3

我有一个.html文件工作得很好但是由于某种原因,Sublime 3决定它的代码无效,请查看下面的图片:

知道为什么会这样,以及如何在不修改代码的情况下修复它?

1 个答案:

答案 0 :(得分:6)

HTML5规范说明(我的重点):

  

评论必须以四个字符序列U+003C LESS-THAN SIGNU+0021 EXCLAMATION MARKU+002D HYPHEN-MINUSU+002D HYPHEN-MINUS<!--)开头。按照此顺序,评论可能包含文本,但附加限制是文本不能以单个>U+003E)字符开头,也不能以U+002D HYPHEN-MINUS字符开头({{ 1}})后跟->)个字符,

     

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

     

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

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

你认为它的作用与C开发人员的想法完全不同,他们想知道为什么他们需要担心未定义的行为,因为他们编写的代码工作得很好。它在一个特定实现中工作正常的事实与可移植代码无关。

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

在一些历史性的挖掘之后,似乎不允许这样做,因为HTML所基于的SGML对评论的规则略有不同。

在感知-->令牌时,解析器切换到评论模式,其中评论中实际允许<!--个字符。如果遇到>序列,则会更改为--结束评论的其他模式。

事实上,它似乎是在这两种模式之间进行了切换,因此>之类的内容是可行的,但<!-- >>>>> -- xyzzy -- >>>>> -->会使>结束评论。

一方面,XML没有采用这种行为,HTML现在已对其进行了修改,以便遵循“不要在评论中使用xyzzy”。规则,原因是几乎没有人知道注释表现为SGML方式,造成一些痛苦: - )