2014-05-01 107 views
1

我知道声明使用老式页面的字符集,像这样:重写元字符编码声明

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


我无法在规格或任何其他声誉良好的来源中找到答案f文档(尽管我可能错过了它)。


侧面说明

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

感谢您的帮助!快乐的编码! :)

回答

1

如果浏览器正在使用meta标签来确定字符编码,那么第一个这样的标签生效。这在目前的HTML规范中没有规定,但这是通用的做法,并在HTML5中进行了标准化,请参阅HTML5 CR第8.2.2.2节Determining the character encoding

问题中提到的两种meta标签没有区别。它们只是语法变体。重要的是外观的顺序:第一个被使用。 (这是比较简单的测试,但你需要使用没有HTTP头指定的编码,并且不包含字节顺序标记的网页,因为这些信息会覆盖任何meta标签。)

+0

之一在MDN文档中为'标签提到的事情如下:*尤其是,HTTP Content-Type标题和任何BOM元素优先于[meta charset'元素。说它在HTML5中是标准化的,你的意思是说,尽管两者在语义上相似,而一个目前优先于另一个,但在未来情况并非如此? –

+0

或者你的意思是说'HTTP Content-Type Header'和'meta http-equiv =“Content-Type”元素实际上是不同的,并且具有不同级别的重要性? –

+0

正在标准化的是'meta'标签的处理。即使根据现有的HTML规范,HTTP标头也优先于它们。BOM甚至超过HTTP头的优先级是当前的做法,违反了HTTP协议,并且正在使用HTML5进行标准化。 –