我经常想知道为什么在创建HTML时没有选择严格的解析。在大多数Internet历史上,浏览器都接受任何形式的标记,并尽力进行解析。该过程会降低性能,使人们书写乱码,并且很难中止过时的功能。
是否有严格解释HTML的特定原因?
我经常想知道为什么在创建HTML时没有选择严格的解析。在大多数Internet历史上,浏览器都接受任何形式的标记,并尽力进行解析。该过程会降低性能,使人们书写乱码,并且很难中止过时的功能。
是否有严格解释HTML的特定原因?
Answers:
因为从浏览器制造商的角度来看,做出最佳猜测是正确的事情。考虑一下情况:理想情况下,您收到的HTML完全正确且符合规范。那很棒。但是有趣的是,当HTML 不正确时会发生什么。因为我们正在处理来自我们没有影响力的来源的输入,实际上,我们必须为此做好准备。现在,当发生这种情况时,我们该怎么办?我们有两个选择:a)失败,和b)尽最大努力从错误中恢复。如果我们失败了,那么用户只会看到一条无用的错误消息,而他们对此无能为力,因为他们无法控制服务器。如果我们尽力而为,则用户至少拥有我们可以对页面进行的处理,而且通常猜测是正确的。
唯一真正的问题是,当您需要错误消息时(通常是在开发环境中),您需要确保生成的HTML是正确的,并且由于“在浏览器X中工作”不等同于“正确”,我们不能简单地通过浏览器运行它并查看它是否有效:我们不能说出正确的HTML和浏览器已为您修复的错误HTML之间的区别。但是,这是一个可解决的问题。有报告标准违规的浏览器插件,有W3C验证程序,以及许多其他类似工具。
HTML作者和创作工具会产生糟糕的标记。浏览器会出于竞争原因而竭尽全力:如果浏览器无法以任何合理的方式呈现大多数网页,则将被用户拒绝,他们不会在乎它是谁的错。
它与编程语言实现的功能完全不同。编译器和解释器处理的代码可以假定是由程序员编写的,而每个人和他的兄弟都可以在不经过任何培训的情况下编写HTML。从某种意义上说,HTML标记是代码,但它是数据,而不是编程语言指令,并且软件中的(良好)传统应能容忍数据。
XHTML原则上规定了严格的(XML)解析规则,因此,只有XML格式正确的XML内容类型的XHTML文档才会显示–否则,仅将第一个错误传达给用户。它从未在Web创作中流行-几乎所有的“ XHTML”都以纯文本/ html的形式提供,并以非常自由的方式作为传统的标签处理,只是带有一些新的怪癖。
HTML authors and authoring tools produce crappy markup.
-他们这样做是因为浏览器接受了。如果从一开始浏览器就不接受它-那么这些工具和作者将无法摆脱产生糟糕的标记的作用
简而言之,HTML是基于另一种称为SGML的非超链接标记语言,通常用于文档和手册等。
从有关HTML历史的文章中:
蒂姆(Tim)提到一些早期的HTML文档是基于CERN已经使用的旧SGML语言编写的:-我们在HTML中包含了CERN曾经使用过的SGML标签集的一些标签,并且曾经获得过[...] HTML解析器的支持。将忽略它不了解的标签,并忽略对CERN-SGML标签不了解的属性。
大部分早期HTML标签实际上是从CERN SGMLGuid语言获得的,该语言本身是AAP(早期SGML语言)的一种变体。例如,标题,hn,p,ol等显然都来自该语言。唯一的根本变化是添加了所有重要的anchor()链接,没有它,WWW就不会实现。
注意到我已经加粗的部分,基本上,他们实现了他们熟悉的SGML系统中可用标签的子集,添加了新的锚点<a>标签,并选择忽略他们没有使用的许多标签中的任何一个。不必关心或希望出于任何原因而支持(例如书目列表标签,“ xmp”作为“示例”标签,“ box”标签以在文本块周围绘制框等)。因此,最简单的方法是原谅解析器不知道的标记,并尽可能地忽略未知标记,无论原因是用户键入错误的标记,还是将现有文档转换为最简单的最快方法这种新的HTML格式是向现有SGML文档添加一些超链接,而忽略不支持或未实现的任何标签。
这部分是浏览器大战的历史遗迹
IE和netscape争夺市场,并不断发布不断变得“很棒”的新功能,并被迫接受为其他浏览器设计的页面。
这意味着在委员会开始参与之后,浏览器会默默地接受和忽略未知标签。好吧,您有一个委员会来设计内容,因此许多不同的版本(带有一些措辞不明确的规范)都希望浏览器支持大多数版本。它们,并为每个版本创建一个单独的解析器将是一件大事。因此(相对)使用具有不同模式的单个解析器比较容易。
另一方面,netscape和IE希望html对于普通人来说是可访问的(这在当时很流行),这意味着尝试做用户想要做的事情,而不是他说过的事情,并遍历每个悬挂的标签。
使问题更严重的是,还有几个“教程”站点在教授错误的内容并认为它们是正确的,因为它们所教的内容是正确的。
最终,这意味着如果您现在创建的浏览器仅使用严格的html解析99%的站点,将无法正常工作。
<o24wowzo>
在标签,但投手犯规<o23wowzo>
,但是这样的设计将损害HTML的“人类可读”方面。
好吧,我们试图在000中建立一个很好的严格选项,但是它没有成功,因为人们盲目地遵循“最佳实践”,将错误的标记归为严格模式,归咎于浏览器。浏览器供应商不喜欢受到指责。
他们声称这是因为他们希望非专业人员可以更轻松地访问Web,但没有人停止使用最宽松形式的HTML 4。
也就是说,如果您希望使用严格的样式布局,则仍可以将HTML5用作XML。IMO可能是一种在更严格的模式下获得布局或UI工作收益的好方法,然后再将其传递给可能会或可能不希望如此严格但没有任何实际风险的其他人(禁止他们将doctype剔除,因为他们实际上更喜欢怪癖模式-应该在2017年(本次编辑之时)将它们拍摄。因此它基本上仍然存在,但需要进行一些研究。我似乎还记得有些XHTML所没有的警告确实会影响版面设计工作。只是不要说“这是做对的唯一方法”,否则买这种话的推特会will绕这个主意,再次责怪浏览器,他们会咬牙切齿。在我们留下的唯一严格的替代方案中。(2017编辑: