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
part.
尽管 XML 1.0 规范建议(但不要求)XML声明 http://www.w3.org/TR/2006/REC-xml11-20060816/#sec-prolog-dtd,这在实践中很重要(除了encoding
)仅适用于能够处理不同版本 XML 的软件。浏览器则不然。除了 XML 1.0 之外,只有 XML 1.1,但使用不多。此外,HTML5被定义为XHTML语法中使用的XML版本是XML 1.0。
The encoding
部分可能很重要,但是utf-8
无论如何,这是 XML 的默认值。如果出于某种原因使用其他编码,则 XML 声明可能有助于防止任何冲突。 HTML5 CR 里面是这么说的编码的讨论 http://www.w3.org/TR/html5/document-metadata.html#charset:“在 XHTML 中,如有必要,应将 XML 声明用于内联字符编码信息。” Ameta
当与 XML 内容类型一起提供时,标签在 XHTML 中并不能真正提供帮助,因为当看到标签时编码已经决定(默认为 UTF-8 或其他)。
对于 HTML 语法,<meta charset=...>
tag may可以使用,但有效性不需要它,并且可以在 HTTP 标头中指定编码(这会覆盖任何meta
标签)。用一个meta
然而,标签可能会有所帮助,因为页面可能保存在本地,然后打开它时不会有任何可用的 HTTP 标头。