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

Sma*_*rty 8 html wordpress byte-order-mark utf-8 w3c-validation

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

Line 1, Column 1: Non-space characters found without seeing a doctype first. Expected <!DOCTYPE html>.
<!DOCTYPE html><!-- HTML 5 -->
Run Code Online (Sandbox Code Playgroud)

此外,DebugBar(http://www.my-debugbar.com/wiki/IETester/HomePage)同意并<!在我从此工具中的"HTML Check"选项卡打开同一页面之前显示两个不可见的字符.但!!

  1. 这行HTML代码来自我的wordpress主题中的文件header.php.
  2. 我将此文件从我的主机下载到本地硬盘.
  3. header.php的第一行是<!DOCTYPE html><!-- HTML 5 -->
  4. 当我在RJ TextEd(只是高级文本编辑器)中打开header.php时,它说:header.php的当前编码是没有(!)BOM的UFT-8 .
  5. 当我在HEX-viewer中打开header.php时,我看到,字节0和1是3c,21 - 所以它是完全正确的<!.

所以,考虑到所有事情,为什么以及从哪里获得这些"奇怪的符号"?

Sma*_*rty 19

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

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

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

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

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