我为html构建了一个解析器,但是我假设它会遵循只有两种形式的规则:
<foo> </foo>
<foo/>
显然这是错误的。诸如base
,meta
和link
之类的标记不需要此标记。
我希望不是这种情况,因为我已经在脚本中找到了类似的内容:
for(var d=b.length,e=b[a];a<d>>1;)
哦,神话般的<d>
标签。
因此,我需要将自己设置为白名单,以便忽略。是否有不需要固结或结束标记的标记的完整列表?如果没有,我将不得不重写解析器。
谢谢
答案 0 :(得分:1)
您可以从WHATWG HTML Living Standard中提取列表。或者,如果愿意,可以使用W3C的HTML 5 Specification或subsequent draft。 Wikipedia认为,冲突在某种程度上已得到解决,而赞成WHATWG,所以您可能希望使用第一个。
无论如何,请特别注意每个元素描述中的子标题“ text / html中的标签省略”。但是您需要仔细阅读文档,以了解HTML解析的来龙去脉。
注意:不仅可以省略结束标签。也有些元素的 open 标签可以省略。 (经典的例子是ServiceConnection
,它几乎没有出现在HTML文档中,但是还有很多其他例子。例如,<tbody>
。)仅忽略了元素的open标签的事实。不会强制省略元素的close标签,尽管通常是这样。因此,仅凭一系列可变标记就无法做到这一点;您还需要考虑元素包含规则。
此外,即使对于有效的文档来说,完整的解析算法也非常复杂,但标准算法和实际的HTML解析器却更加复杂,因为它们试图优雅地处理不符合标准的网页