XML 声明是有效的,并且在 HTML5 的 XHTML 序列化中得到验证。以下相当少的文档验证:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title></head>
<body></body>
</html>
但是,这只适用于 HTML5 的 XHTML 序列化(XHTML 语法)。在 HTML 序列化中是不允许的。如果您将上述文档写入文件并将其存储在将发送它的服务器中Content-Type: text/html
(如果文件名以“.html”结尾,通常会发生这种情况),那么您会收到一条错误消息:
Saw <?. Probable cause: Attempt to use an XML processing instruction in HTML.
(XML processing instructions are not supported in HTML.)
这里的“HTML”仅表示 HTML 序列化。
浏览器不关心这两种语法中的 XML 声明。在 HTML 语法中,它只是被忽略,作为可恢复的语法错误。在 XHTML 语法中,这无关紧要,除了encoding
部分。
尽管 XML 1.0 规范推荐(但不要求)XML 声明,但实际上(除了 的意义之外encoding
)它只对能够处理不同版本的 XML 的软件起作用。浏览器不是。而且除了 XML 1.0 之外,只有 XML 1.1,用的不多。此外,HTML5 被定义为在 XHTML 语法中使用的 XML 版本是 XML 1.0。
该encoding
部分可能很重要,但utf-8
无论如何都是 XML 的默认值。如果出于某种原因使用另一种编码,则 XML 声明可能有助于防止任何冲突。HTML5 CR 在其关于编码的讨论中这样说:“在 XHTML 中,如有必要,应将 XML 声明用于内联字符编码信息。” 当使用 XML 内容类型提供meta
标记时,标记在 XHTML 中并不能真正提供帮助,因为在看到标记时已经确定了编码(默认为 UTF-8 或其他方式)。
对于 HTML 语法,可以<meta charset=...>
使用标签,但它不是有效性所必需的,并且可以在 HTTP 标头中指定编码(它会覆盖任何标签)。然而,使用标签可能会有所帮助,因为页面可能会保存在本地,然后打开时不会有任何可用的 HTTP 标头。meta
meta