覆盖元字符编码声明



我知道使用旧样式声明页面的字符集,就像这样:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

将覆盖使用新样式的页面字符集的任何声明,如:

<meta charset="utf-8" />

但是我想知道两个旧风格的声明会做什么?第一个是不是取代了第二个?第二个是不是取代了第一个?或者在决定页面实际编码的算法的剩余部分中都省略并简单地排除它们。


作为一个例子,我想知道下面代码片段中的哪个字符编码声明将被接受,并被考虑到确定页面字符编码的算法中:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    ...
</head>


我无法在规范或任何其他有信誉的文档来源中找到这个问题的答案(尽管我可能错过了它)。


附注

我问这个问题不是因为正确设置页面的字符编码有困难,而是因为我对答案很好奇,以及浏览器是否喜欢第一个或第二个声明。因此,替代解决方案/变通方法将不是这个问题的可行答案。

谢谢你的帮助!编码快乐!:)

如果浏览器使用meta标记来确定字符编码,则第一个这样的标记生效。这在当前的HTML规范中没有规定,但它是HTML5中常见的做法和标准化,参见HTML5 CR,条款8.2.2.2确定字符编码。

问题中提到的两种meta标签之间没有区别。它们只是语法变体。重要的是出现的顺序:使用第一个。(这是相对简单的测试,但你需要使用一个页面,没有HTTP头指定编码,不包含字节顺序标记,因为这样的信息会覆盖任何 meta标签。)

最新更新