0

我为 html 构建了一个解析器,但我假设它会遵循只有两种形式的规则:

<foo> </foo>
<foo/>

显然这是错误的。诸如 , 和 之类的标签base不需要meta这个link。我有点希望不是这样,因为我在脚本中发现了这样的东西:

for(var d=b.length,e=b[a];a<d>>1;)

哦,看,神话般的<d>标签。

所以我需要让自己成为一个要忽略的标签白名单。是否有不需要固相线或结束标签的标签的完整列表?如果没有,我将不得不重写我的解析器。

谢谢

4

1 回答 1

2

您可以从 WHATWG HTML Living Standard中提取列表。或者,如果您愿意,可以使用 W3C 的HTML 5 规范后续草案。根据Wikipedia的说法,最近冲突在某种程度上得到了解决,有利于 WHATWG,所以你可能想选择第一个。

在任何情况下,请特别注意每个元素描述中的子标题“text/html 中的标记遗漏”。但是你需要仔细阅读文档才能理解 HTML 解析的来龙去脉。

注意:不仅仅是结束标签可以省略。还有一些元素的打开标签可以省略。(经典的例子是<tbody>,它在 HTML 文档中几乎没有实际出现过,但还有很多其他的。<head>,例如。)省略元素的打开标记这一事实并不强制省略元素的结束标记,尽管这种情况很常见。所以你不能只用一个可省略的标签列表来做到这一点;您还需要考虑元素包含规则。

此外,即使对于有效文档,完整的解析算法也非常复杂,但标准算法和现实世界的 HTML 解析器更加复杂,因为它们试图优雅地处理不符合标准的网页。

于 2019-07-06T02:36:54.700 回答