XHTML验证:prolog中不允许使用字符“”。为什么?

时间:2011-10-14 07:35:25

标签: php html xhtml

为什么这个页面没有验证?

http://www.jethroweb.nl/test/test.php

我认为XHTML代码没问题,但W3C Markup Validation ServiceWDG HTML Validator不同意。

更新:XHTML代码由PHP生成,这是第一行代码:

echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"';
echo PHP_EOL;
echo '        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
echo PHP_EOL;
echo '<html xmlns="http://www.w3.org/1999/xhtml">';
echo PHP_EOL;
echo '<head>';
echo PHP_EOL;

UPDATE2:也许这更像是一个PHP问题。当我将生成的XHTML代码粘贴到Notepad++时,我在第一行看到一个问号:

enter image description here

3 个答案:

答案 0 :(得分:2)

根据W3C validator

  

在UTF-8文件中找到的字节顺序标记。

     

已知UTF-8编码文件中的Unicode字节顺序标记(BOM)会导致某些文本编辑器和旧版浏览器出现问题。在获得更好的支持之前,您可能需要考虑避免使用它。

这就是你的错误的原因:字节顺序标记是一个零宽度空间,它告诉你prolog中不允许使用该字符(在doctype之前)。

使用文本编辑器重新保存文件,该编辑器允许在没有BOM的情况下进行保存(几乎除了记事本之外的所有内容)。

答案 1 :(得分:2)

因为文件是以字节顺序标记发送的。

字节顺序标记用于标识文本文件的编码,但在通过Web发送文本时不应包含它们。

如果您的Web服务器在发送文件时无法删除字节标记,则必须保存没有字节顺序标记的文件。大多数编辑都可以选择在另存为对话框中执行此操作。

答案 2 :(得分:2)

您的php源文件test.php包含字节顺序标记。尝试再次保存test.php而不使用字节顺序标记。