【发布时间】:2018-11-02 09:28:25
【问题描述】:
html5 不像 xml 那样严格,所以即使是这个糟糕的文件也会被 w3c html5 validator 验证:
<!doctype html>
<title>crappy html5</title>
<div class=dummy>
<h1>crappy html5</h1>
<p class=noclosetag>HTML5 is awesome
<ol class=navigator>
<li><a href=/>index</a>
<li><a href=/user>user</a>
<li><a href=/rss>rss</a>
</ol>
</div>
如果规则是允许的,那么一些懒惰的程序员可能会通过编写糟糕的文件来节省一些工作;但是,我想知道 这是否会导致明显的性能问题,因为浏览器需要纠正糟糕页面上的错误;我还没有做测试,部分原因是我不知道什么是对这些事情的公平和彻底的测试;
【问题讨论】:
-
所以定义蹩脚。如果它是格式良好的 HTML,就像在这个例子中一样,它仍然很糟糕吗?老实说,我希望验证器会抱怨属性值中未引用的
/。较早的SGML definition of HTML 没有提到斜线可以不被引用。 -
@MrLister 非正式的蹩脚使得正确解析和理解 html 文档的语义变得更加复杂;一个例子是未封闭的标签;您可以说您仍然知道如何为此类文档正确生成 dom 树,因为您的 html 知识与解析器一样好,但对于较少专家而言,这不太可能是正确的;形式上,糟糕和不糟糕之间的界限是文档是否可以被验证器成功解析;所以你可以肯定地说,从这个意义上说,上述文件并不糟糕,但这不是这个问题所要讨论的;
-
您对搜索引擎的担忧是有效的。每个解析器都会有所不同,我经常遇到访问 HTTP 404 的搜索引擎,因为网站没有正确解析(或验证)URL(例如example.com/www.i-dont-know-how-to-link)。我的建议是将 HTML5 作为 XML (application/xhtml+xml) 提供,并确保简单的事情得到验证。更容易,因为在示例中
input元素现在支持type="url",尽管所有客户端数据都应始终进行验证。正确/严格的代码有很多好处,可以节省时间。