11

自从我学会了将 XHTML 页面作为 XML 提供服务后,我开始注意到一些奇怪的事情:每当我在 Firefox 源代码查看器中查看 XHTML 页面时,DOCTYPE总是被标记为错误。根据我从鼠标悬停得到的工具提示,有问题的错误是“流浪文档类型”。据我了解,“流浪文档类型”意味着在文档中间有一个不属于它的额外文档类型,这里肯定不是这种情况。

这是一个示例 - 此标记将通过验证,并在所有现代浏览器中正确显示:

<?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>

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

4

3 回答 3

8

我是这个功能的开发者。你发现了一个错误。(刚刚提交。)谢谢。

查看源代码语法突出显示基于 HTML 解析器,因为我们的 XML 解析器不适合此目的,而且 XML 非常罕见,将资源用于实现适当的 XML 查看源代码没有意义。因此,XML View Source 功能是对 HTML 解析器的一种破解,而这方面的工作并不完全正确。

于 2013-11-19T08:49:31.857 回答
1

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

于 2020-05-31T09:34:49.653 回答
0

除了@Public Sphere 的回答。

使用<!DOCTYPE html>. <html>对于,<head><body>标签(杂散的开始标签“html”) ,可能也会显示相同的警告。

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

  • 点击“网络”标签
  • 点击第一个请求
  • 在右侧详细信息面板上,单击“响应”选项卡并展开“响应负载”
  • 您现在将看到原始响应。文档类型行前面有一个红点,悬停时显示“\ufeff”

为了轻松找到可能导致问题的文件,您可以在 Linux 中使用此 grep 查找所有带有 BOM 的文件:

grep -rl $'\xEF\xBB\xBF' .
于 2021-02-03T10:55:40.547 回答