0

HTML 中的某些标签可以在没有固定线的情况下自行关闭。例如:

<link rel="shortcut icon" href="//www.google.com/favicon.ico">

已验证。因此,这不是必需的:

<link rel="shortcut icon" href="//www.google.com/favicon.ico"/>

或者

<link rel="shortcut icon" href="//www.google.com/favicon.ico">foo</link>

使用这些不需要固相线的指定标签,假设我遇到:

<link rel="shortcut icon" href="//www.google.com/favicon.ico">

我可以假设</link>不存在对应的,还是我需要解析文档的其余部分并自己确定?

4

1 回答 1

2

我知道HTML 规范是一个非常令人生畏的文档。但我认为它至少会帮助您阅读有关 elements 的概述,遵循任何似乎相关的链接。

特别是,您将在那里看到<link>一个void element,该部分说:

void 元素只有一个开始标签;不得为 void 元素指定结束标记。

因此,您的第二个示例(其中文本foo似乎是元素的内容)实际上具有欺骗性。该元素在遇到文本之前已经关闭,因此文本是父元素的内容(如果可能的话)。显式结束标记是错误的,应该被忽略。

尽管 void 元素在 HTML5 中不需要自闭合,但它们在 XHTML 中确实需要自闭合,因此<…/>语法很常见。


注意:( 以下内容是在我认为需要一个精确的 HTML 解析器时编写的。但我会保留它,即使它看起来有点激进,因为我认为它确实对人们有一些一般性的建议谁(试图)编写 HTML 解析器。)

我知道引用的标准是一个庞大的文档,有时令人困惑,而且总是很复杂。这使得编写 HTML 解析器成为一项挑战。但没有捷径可走。如果你想写一个兼容的解析器,你必须阅读标准。如果您不太关心合规性,则不应询问哪些构造是合规的(但是您将丧失抱怨生成不合规 HTML 的内容创建者的权利)。

开源解析器也作为库存在,因此没有明显需要编写新的解析器。另一方面,没有什么比编写解析器更能教会你这项任务的了,我尊重任何愿意这样做的人。我不认为这是我现在会承担的项目。如果您想这样做,请从阅读标准开始。此外,考虑加入相关的邮件列表或至少关注一些讨论。祝你好运!

PS:另一个有用的资源是 Mozilla Developer Network (MDN) 文档,链接自 WHATWG 文档。例如,参见其关于<link>element的章节,尤其是技术规范部分。

于 2019-07-07T15:45:51.050 回答