浏览器为何将“ <??>”解析为“ <!-??->”?

时间:2019-10-07 11:19:06

标签: html

我有一个带有以下HTML代码的文件:

<p><? comment ?></p>

Curl返回正常响应:

$ curl file:///path/to/the/file.html
<p><? comment ?></p>

但是当我使用Firefox 69或Chrome 77解析该响应时,由于HTML代码如下,因此没有任何显示:

<html><head></head><body><p><!--? comment ?--></p></body></html>

对我来说看起来很奇怪。为什么会发生?

谢谢。

1 个答案:

答案 0 :(得分:6)

这是HTML标记化规则的一部分。

<字符使您的浏览器进入tag-open-state

  

12.2.5.6标签打开状态

     

使用下一个输入字符:

     
      
  • U + 0021感叹号(!)      
        
    • 切换到标记声明打开状态。
    •   
  •   
  • U + 002F SOLIDUS(/)      
        
    • 切换到结束标签打开状态。
    •   
  •   
  • ASCII字母      
        
    • 创建一个新的开始标记令牌,将其标记名称设置为空字符串。重新使用标签名称状态。
    •   
  •   
  • U + 003F问号(?)      
  •   
  • ...
  •   

因此,将您的?字符视为一个已知错误,然后解析器切换到bogus comment state,这会将所有内容放入注释令牌中的下一个>字符。 / p>