是否有不需要斜线或结束标签的所有 html 标签的列表?

Is there a list of all html tags that do not need a solidus or a closing tag?

我为 html 构建了一个解析器,但我在假设它将遵循只有两种形式的规则的情况下工作:

<foo> </foo>
<foo/>

显然这是错误的。 basemetalink 等标签不需要这个。 我有点希望情况并非如此,因为我在脚本中发现了这样的事情:

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

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

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

谢谢

您可以从 WHATWG 中提取一个列表 HTML Living Standard. Or, if you prefer, the W3C's HTML 5 Specification or the subsequent draft. According to Wikipedia,冲突最近已得到一些有利于 WHATWG 的解决,因此您可能希望使用第一个列表。

无论如何,请特别注意每个元素描述中的副标题 "Tag omission in text/html"。但是你需要仔细阅读文档,了解HTML解析的来龙去脉。

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

此外,即使对于有效文档,完整的解析算法也出奇地复杂,标准算法和 real-world HTML 解析器甚至更复杂,因为它们试图优雅地处理网页不符合标准