&引用;“散乱的doctype”;firefox源代码查看器中出现错误

&引用;“散乱的doctype”;firefox源代码查看器中出现错误,firefox,xhtml,doctype,Firefox,Xhtml,Doctype,自从我学会将XHTML页面作为XML提供以来,我开始注意到一些奇怪的事情:每当我在Firefox源代码查看器中查看XHTML页面时,DOCTYPE总是被标记为错误。根据我在上面滑动鼠标得到的工具提示,所讨论的错误是“游离的doctype”。从我所理解的,一个“杂散的DOCTYPE”意味着文档中间有一个额外的DOCTYPE。我不属于这里,这里肯定不是这样 这里&apos;例如,此标记将通过验证,并在所有现代浏览器中正确显示: <?xml version="1.0" encoding="utf

自从我学会将XHTML页面作为XML提供以来,我开始注意到一些奇怪的事情:每当我在Firefox源代码查看器中查看XHTML页面时,DOCTYPE总是被标记为错误。根据我在上面滑动鼠标得到的工具提示,所讨论的错误是“游离的doctype”。从我所理解的,一个“杂散的DOCTYPE”意味着文档中间有一个额外的DOCTYPE。我不属于这里,这里肯定不是这样

这里&apos;例如,此标记将通过验证,并在所有现代浏览器中正确显示:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--FF source viewer will mark the preceding two lines as an error.-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
    <meta http-equiv="content-type"
      content="application/xhtml+xml; charset=utf-8" />
    <title>Sample XHTML Page</title>
  </head>
  <body>
    <p>This is an example.</p>
  </body>
</html>

示例XHTML页面
这是一个例子


考虑到这些页面完全通过了验证,并且一个解析错误通常会破坏页面,此错误消息特别奇怪。

我是此功能的开发人员。你发现了一个bug。谢谢


视图源代码语法突出显示基于HTML解析器,因为我们的XML解析器不适合此用途,而且XML非常罕见,因此没有必要将资源用于实现适当的XML视图源代码。因此,XML视图源代码功能是对HTML解析器的一种攻击,这一功能无法正常工作。

出现错误是因为文件保存为UTF-8 BOM而不是UTF-8。在记事本中打开文件并更改其编码。

除了@Public Sphere的答案之外

使用
时也会出现此警告。 对于
标记(零散的开始标记“html”),可能也会显示相同的警告

要检查UTF-8 BOM是否存在问题:

  • 单击“网络”选项卡
  • 单击第一个请求
  • 在右侧详细信息面板上,单击“响应”选项卡并展开“响应有效负载”
  • 现在您将看到原始响应。 doctype行前面有一个红点, 悬停时显示“\ufeff”
要轻松查找可能导致问题的文件,您可以在Linux中使用此grep查找具有BOM的所有文件:

grep -rl $'\xEF\xBB\xBF' .

从技术上讲,DOCTYPE声明对于以XML模式解析和呈现页面是可选的,但这并不意味着正如您正确指出的那样,在该位置会出现意外的声明,尽管它对于解析是可选的,但对于验证仍然是必需的(毕竟,验证器如何知道这是严格的XHTML1.0,而不做任何假设?)。如果页面作为HTML提供,我希望看到错误,但它也存在于真正的XHTML页面中。我倾向于认为这是FF中的错误,特别是因为这种行为与W3验证器的输出相反。实际上,只有当页面作为
应用程序/XHTML+xml
;作为提供时,错误才会出现ode>text/html,错误没有出现。这是2016年的最后一天,它也出现在SVG中的xml+DOCTYPE中。使用XSL生成html的xml文档也会出现同样的问题。我对标记为“游离DOCTYPE”的DOCTYPE进行了注释out,然后我得到了XSL行的控制台错误:>InvalidStateError:试图使用不可用或不再可用的对象。结果是,对于生成HTML输出的XML+XSL,相对链接不能正确工作http://.../file.xml#link 如果已加载,则链接不会转到右侧锚点。请单击o我在Bugzilla中也更新了这个案例)我刚刚测试了Chrome,它也有同样的问题。(FF 26,Chrome 31.0.1650.63 m)3年后,这个错误仍然存在于Firefox ESR 45.4(Debian GNU/Linux)中,我在一个使用DTD XHTMLBasic 1.1的页面中体验到了它。