DTD 之前的非空白字符在某些情况下会使该 DTD 失效

本文深入探讨了HTML文档中DTD(文档类型定义)前字符如何影响不同浏览器的识别行为,指出若在DTD前加入非空白符如注释或XML声明,可能导致浏览器进入混杂模式而非标准模式,进而引发页面布局、功能使用等方面的一致性问题。文中提供了确保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 文档的第一行。

转载于:https://www.cnblogs.com/ruijian/archive/2011/11/12/2246083.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值