HTML验证错误:在DOCTYPE之前找到非空格字符

时间:2011-11-08 14:29:19

标签: html wordpress utf-8 w3c-validation byte-order-mark

我有一个博客(基于wordpress)。并尝试通过w3c验证器验证我的一个页面。第一个错误是:

Line 1, Column 1: Non-space characters found without seeing a doctype first. Expected <!DOCTYPE html>.
<!DOCTYPE html><!-- HTML 5 -->

此外,DebugBar(http://www.my-debugbar.com/wiki/IETester/HomePage)同意并在<!之前显示两个不可见的字符,当我从“HTML Check”标签中打开同一页面时这个工具。 BUT !!

  1. 这行HTML代码来自我的wordpress主题中的 header.php 文件。
  2. 我将此文件从我的主机下载到本地硬盘。
  3. header.php 的第一行是<!DOCTYPE html><!-- HTML 5 -->
  4. 当我在RJ TextEd(只是高级文本编辑器)中打开 header.php 时,它说: header.php 的当前编码是UFT-8 不带< / strong>(!)BOM。
  5. 当我在HEX-viewer中打开header.php时,我看到,字节0和1是3c,21 - 所以它正是<!
  6. 所以,考虑到所有事情,为什么&amp;从哪里得到这些“奇怪的符号”?

1 个答案:

答案 0 :(得分:19)

我找到了问题的根源。一般规则是:

  

如果有任何(绝对任何!)文件参与构建   最终HTML页面的代码(要发送给客户端的代码)具有编码   BOM - 最终的HTML页面将是UTF-8-BOM。那就是:你整个网站   应包含带有BOM的甚至1个文件

在我的情况下,我的网站总共有1.3K文件。 BOM表只有4个文件:

  • wp-config.php(在网站的根目录中)
  • jquery.query.js(在include文件夹中)
  • cyr-to-lat.php(在插件文件夹中)
  • footer.php(在主题根文件夹中)

我被迫将这4个文件中的所有这些文件重新保存为“UFT-8无BOM”,以消除“非空格字符”验证错误。当我这样做(重新保存文件)时 - 错误消失了。