假设浏览器遇到指定字符编码的<meta>
标记,如下所示:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
它是否从一开始就重新解析页面开始,因为<head>
部分中的某些前面的字符可能被错误地解释了?或者是否有一些其他约束阻止先前的字符被错误地解释?
答案 0 :(得分:4)
据我所知,浏览器在找到<head>
中的字符集声明后不会返回,并且它们在此之前假定与ASCII兼容的字符集。不幸的是我无法找到确认这一点的参考。
如果服务器已经提供了Content-Type HTTP标头,则确认浏览器将忽略Content-Type元元素,因此您不能使用<meta>
元素覆盖“错误的”服务器端字符集。 / p>
<meta>
字符集声明的要点是HTTP服务器不是服务器的HTML文档。
这意味着您不应该依赖HTML文件中的<meta>
字符集声明,而是配置HTTP服务器以提供正确的字符集。如果由于某种原因你必须依赖<meta>
字符集声明,那么你应该只有ASCII字符,并尽可能早地在<head>
中定位,最好是作为第一个元素。< / p>
答案 1 :(得分:1)
在某些情况下,解析器可以重新开始。相关规范如下:http://dev.w3.org/html5/spec/parsing.html#change-the-encoding
请注意,浏览器传统上可能没有完全遵循此算法;可能他们都做了一些略有不同的事情。但是,上面的链接描述了HTML5兼容的浏览器应该做什么。所描述的算法可能是各种浏览器先前行为的混合。
由于HTML5仍然是一个工作草案,因此应该考虑将其更改。
答案 2 :(得分:0)
它对节点结构没有实际影响。只需要对文本节点(和属性节点)的内容进行转码。
如果您的服务器发送
Content-type: text/html;charset=utf-8
...标题浏览器将从一开始就知道正确的字符集。您可以使用包含以下内容的 .htaccess 文件来解决问题。
AddDefaultCharset utf-8