zoukankan      html  css  js  c++  java
  • DTD 之前的非空白字符在某些情况下会使该 DTD 失效

    http://w3help.org/zh-cn/causes/HG8001

    标准参考

    HTML 4.01 规范中提到,DTD 的前面或后面允许出现空白符,这里提到的“空白符”包括空格符换行符制表符注释

    关于 HTML 文档结构的详细信息,请参考 HTML 4.01 规范 7.1 Introduction to the structure of an HTML document 中的内容。

    问题描述

    如果在 DTD 之前加入注释或其他内容,在某些浏览器中该 DTD 将无法被识别。

    造成的影响

    这个问题将导致同一个页面在有些浏览器中工作在标准模式 (S) 下,在其他浏览器中工作在混杂模式 (Q) 下,从而导致该页面的表现在各浏览器中产生较大差异,如布局混乱、内容重叠、功能无法使用等。

    受影响的浏览器

    IE6
    DTD 前的任何非空白符都将使浏览器忽略 DTD,包括注释和 XML 声明。

    IE7 IE8
    DTD 前的任何非空白符都将使浏览器忽略 DTD,包括注释,但不包括 XML 声明。

    Firefox
    DTD 前的任何包含“<”的字符都将使浏览器忽略 DTD,但不包括 XML 声明。

    Chrome Safari Opera
    DTD 前的任何非空白符都将使浏览器忽略 DTD,但不包括 XML 声明。

    问题分析

    一个 HTML 文档的 DTD 前边如果出现其他字符,在各浏览器中的处理情况是不一致的。

    具体差异请参考下表:

    如果 DTD 之前出现
    浏览器是否能识别该 DTD

    image

    【注】
    1. 即HTML注释,如 <!-- comment -->。
    2. 类似 <?xml version="1.0" encoding="utf-8"?> 的 XML 声明。
    3. 即不是空格符、换行符、制表符,也不是注释、XML 声明的任何其他字符串,但不能包含“<”字符。
    4. 即不是空格符、换行符、制表符,也不是注释、XML 声明的任何其他字符串,其中包含“<”字符。

    通过以上对比可以看出,要保证 DTD 在所有浏览器中都能正常识别,DTD 之前只能出现空格符换行符制表符

    解决方案

    声明 DTD 时,确保 DTD 之前没有其他字符,即便有,也只能是空格符换行符制表符

    如将 DTD 放在 HTML 文档的第一行。

  • 相关阅读:
    eclipse开发环境搭建
    如何在不知道密码的情况下卸载趋势防毒墙网络版
    PB 将游标中的数据存到数组中
    SQL Server 系统表使用举例
    row_number() over(partition by a order by b desc) rn 用法
    C#选中当前一行,判断是否为空(顺序)
    C#DataTable与Grid的差别
    C#采番的前端与SQL的写法
    Grid的check
    Combox的去重方法
  • 原文地址:https://www.cnblogs.com/ruijian/p/2246083.html
Copyright © 2011-2022 走看看