【问题标题】:Do browsers automatically insert missing HTML tags?浏览器会自动插入缺失的 HTML 标签吗?
【发布时间】:2014-11-14 02:55:53
【问题描述】:

我正在处理一个网页,它将内容从 XML 转换为 HTML,然后将其显示在 HTML 模板页面上。我有一个页面,其中模板中定义的一些元素被放错了位置。我唯一能想到的是 XML 的翻译不正确。现在我的问题是,如果翻译不正确并且缺少标签(例如缺少</div> 标签),浏览器会自动插入必要的标签吗?

我只是不明白我的模板页面上的其他元素怎么会出现在错误的位置,除非浏览器正在做一些我不知道的事情......

【问题讨论】:

  • 有的。有些没有。它们的内容和方式各不相同。
  • 我相信大多数网络浏览器都试图优雅地失败(除非你使用 strict DTD),问题在于规范 无法定义如何呈现无效内容。
  • 请注意,HTML 解析器可能会因为缺少标签以外的原因移动元素。例如,Jukka 提到的adoption agency algorithmfoster parenting 以及reconstruction of the active formatting elements 在技术上不是一个举动,但仍然会导致元素出现在令人惊讶的地方。

标签: html


【解决方案1】:

在大多数情况下,未关闭的标签会自动关闭 - 但每个浏览器都会以不同的方式处理未关闭的标签。它不仅取决于您的浏览器,还取决于文档类型规范。

引用@Elliott Frisch

我相信大多数网络浏览器都会尝试优雅地失败(除非您使用 严格的 DTD),问题是规范无法定义如何 渲染无效内容

您可以在此处找到有关浏览器对无效标记的解释的更多信息: http://www.w3.org/wiki/Validating_your_HTML#Different_browsers_interpret_invalid_HTML_differently

根据 W3C:指定您的文档类型以及使用验证器可以帮助找到违规标签:http://www.w3.org/TR/WCAG20-TECHS/H74.html

这是 W3C.H74 的摘录:

示例 1:HTML

HTML 页面包含一个文档类型声明(有时称为 作为 !DOCTYPE 语句)。开发者可以离线或在线使用 验证器(请参阅下面的参考资料)检查所有 id 属性值 是唯一的,并且根据 规范。

注意:标签需要关闭元素的规范有 随着 HTML5 的引入而改变。

示例 2:XHTML

与其他基于 XML 的文档一样,XHTML 文档引用 文档类型定义 (DTD) 或其他类型的 XML 架构。这 开发者可以使用在线或离线验证器(包括验证 内置于编辑器中的工具)来检查开始和结束标签是 按照规范使用。

示例 3:使用测试框架

当网站动态生成 HTML 或 XHTML 而不是提供服务时 只有静态页面,开发人员可以使用 XHTMLUnit、XML 测试套件或 类似的框架来测试生成的 XHTML 代码。

W3C 提供用于测试您的 html 的资源:@​​987654324@

网络上有许多 HTML 验证器,但正确指定 doctype 以充分利用它们很重要。这是另一个可能对您有所帮助的资源列表:http://www.w3.org/wiki/Validating_your_HTML

【讨论】:

  • DTD 不会影响这一点。引用的 WCAG 文档没有说明它声称的内容(“改变未封闭标签的行为”)。
  • 我相信这取决于浏览器,以及所使用的验证软件。
  • 如果这篇文章可以被纠正以解释对 WCAG 文件的错误引用,我会接受它作为答案。
  • 我更新了答案,如果这不正确,请告诉我。我相信它应该很好。
【解决方案2】:

他们都这样做。例如,检查http://blog.fefe.de/ 的来源以查看由任何现代浏览器完成的最小变体。如果您使用浏览器开发工具,它将显示所有缺少的标签。

一个常见的例子是每个浏览器都将tbody 元素添加到缺少一个的表中。所以如下:

<table>
    <tr>
        <td></td>
        <td></td>
        <td></td>
    </tr>
</table>

会变成:

<table>
    <tbody>
        <tr>
            <td></td>
            <td></td>
            <td></td>
        </tr>
    </tbody>
</table>

【讨论】:

    【解决方案3】:

    缺少的标签根据标签的不同而不同。当 HTML 规范允许省略结束标记时,例如对于&lt;/p&gt;&lt;/td&gt;,所有浏览器都暗示了它们,甚至被要求这样做。 invalid 结束标记省略的情况有所不同。例如,&lt;/div&gt; 可能永远不会被省略。浏览器实际上所做的是它们在文档正文的最后暗示关闭&lt;/div&gt;。这通常意味着div 元素被解释为包含比预期更多的内容,如果存在格式化元素的样式表(或处理它的脚本),这可能会产生严重影响。对于像em这样的文本级元素,处理更加复杂:当遇到封闭块元素的结尾时,会隐含结束标记文本级元素在开始时再次打开下一个街区!这在 HTML5 规范的第 8.2.8 节An introduction to error handling and strange cases in the parser 中进行了描述,并介绍了其他特性。

    所有这些都适用于 HTML 语法。当使用 XHTML 语法 and 时,已指示浏览器将数据处理为 XML 内容类型,例如 application/xhtml+xml,不允许省略结束标记:第一个省略的结束标记是一个格式良好的违反,被视为一个致命的错误。这意味着根本不显示文档内容;而是向用户显示一条错误消息。这在网页上很少见,因为很少有充分的理由使用“真正的 XHTML”(即由 XML 规则处理的 XHTML)。

    结论是您应该生成有效的 HTML,并且至少在某些测试中使用合适的验证器(例如 http://validator.w3.org)对其进行验证。

    【讨论】:

      猜你喜欢
      • 2012-04-09
      • 2014-01-16
      • 2012-02-14
      • 2020-11-04
      • 1970-01-01
      • 2020-07-08
      • 2017-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多