encoding - 对 xhtml5 : no more `<?xml?>` and now mandatory `meta` ? 感到困惑

标签 encoding xhtml html

我是 XHTML 1.0 Strict 的长期用户,我现在正尝试在我的新项目中切换到 XHTML5。

我很困惑 <?xml version='1.0' encoding='utf-8'?>对于 HTML5,由 http://validator.w3.org/ 不再被认为是有效的.这是为什么?这不是所有 xml 文档的开头吗?

当我删除标准 <?xml 时…,我的文档仍然无法验证:现在它缺少编码。我不喜欢那些meta标签,但它们现在实际上是强制性的,以指定编码,以便成为有效的 (X)HTML5 吗?

最佳答案

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 declaration ,实际上它只对能够处理不同版本的 XML 的软件很重要(除了 encoding 的重要性)。浏览器不是。而除了 XML 1.0 之外,只有 XML 1.1,用得不多。此外,HTML5 的定义使得 XHTML 语法中使用的 XML 版本为 XML 1.0。

encoding部分可能很重要,但是 utf-8无论如何是 XML 的默认值。如果您出于某种原因使用另一种编码,那么 XML 声明可能有助于防止任何冲突。 HTML5 CR 在其中说明了这一点 discussion of encodings :“在 XHTML 中,如有必要,应将 XML 声明用于内联字符编码信息。” meta当与 XML 内容类型一起提供时,标记在 XHTML 中并不能真正发挥作用,因为在看到标记时编码已经确定(默认为 UTF-8 或其他)。

对于 HTML 语法,<meta charset=...>标记可以被使用,但它不是有效性所必需的,编码可以在 HTTP header 中指定(它会覆盖任何 meta 标记)。使用 meta然而,标记可能会有帮助,因为页面可能保存在本地,然后在打开时不会有任何可用的 HTTP header 。

关于encoding - 对 xhtml5 : no more `<?xml?>` and now mandatory `meta` ? 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16600671/

相关文章:

php - UTF-8 编码无法正常工作 php

PHP Curly Quote 字符编码问题

xhtml - XHTML anchor 链接,带有背景图片,无文字

jquery - 使用 jQuery 拖放交换

php - 计算选中的复选框的数量

java - getBytes ("UTF-8")、getBytes ("windows-1252") 和 getBytes() 之间有什么区别?

javascript - 凯撒密码不明白如何解决

jquery - 如何在html网页中播放音频文件

html - IE9 中的 XHTML 字体浏览器兼容性

html - 等高元素,在 flexbox 容器内底部对齐,纯 CSS