HTML规范的哪一部分导致角括号内的URL被解析为带有属性的<http:>元素?

时间:2017-08-16 11:50:35

标签: html html5 url standards specifications

这是我的HTML代码。

<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head>
    <title>Bar</title>
    <script>
    window.onload = function() {
        console.log(document.body.innerHTML)
    }
    </script>
</head>
<body>
<http://www.example.com/foo/bar/baz.html>
</body>
</html>

我将此代码保存在名为bar.html的文件中,然后使用Firefox或Chrome打开该页面。这是我在控制台中看到的输出。

<http: www.example.com="" foo="" bar="" baz.html="">


</http:>

现在我了解到我的代码不正确,因为它在<>中包含了一个网址。

我想了解浏览器究竟是如何将其解析为http:标记,其中部分网址被解释为HTML属性。

HTML规范的某些部分是否会导致这种行为?如果是这样,你能引用HTML规范的这些部分吗?

2 个答案:

答案 0 :(得分:5)

您需要知道的一切都在section 8.2.4。特别是:

  1. 最多<http:,解析器位于tag name state。元素的标记名称为http:,包括冒号,如</http:>结束标记所示。

  2. 第一个/将解析器切换为self-closing start tag state

  3. second /导致解析错误,如步骤2中的链接所述,将解析器切换为before attribute name state

  4. 解析器输入attribute name state并继续使用该URL。这就是导致路径路径被视为属性名称的原因。

  5. 当解析器到达下一个/时,它会切换回自闭合开始标记状态并重复步骤2和3,除了它不是第二个{{1}但是一个不同的字符(不是/)会导致解析错误并在步骤3中将解析器切换回之前的属性名称状态。

  6. 解析器最终看到>后,它会关闭开始标记,发出标记并继续正常进行。

答案 1 :(得分:-3)

据我所知,HTML规范定义了HTML概念,但没有定义如何解析它。解析算法是浏览器程序员的内部主题,他们尽力解析HTML甚至错误。