浏览器如何解释响应头或元标记中没有字符集的页面?

时间:2013-09-13 20:11:23

标签: html apache character-encoding browser

我为Windows安装了xampp 1.8.1,我打开了http://localhost/xampp,打开了xampp的索引页。

内容类型页面的响应标头未指定Charset:

Content-Type:text/html

页面的html也没有指定Charset。

在这种情况下,浏览器如何处理页面?

2 个答案:

答案 0 :(得分:3)

如果页面以UTF-8或UTF-16字节顺序标记开头,则从中获取编码。这种情况发生在以前,优先于查看HTTP标头和<meta>元素。

如果没有BOM,则使用的编码取决于实现,可能取决于用户在世界的​​哪个位置。

该阶段的所有变体都与ASCII有效一致,因此如果页面内容仅包含ASCII字符,则不指定编码可能没有坏处。

有关详细信息,请参阅http://www.w3.org/html/wg/drafts/html/master/syntax.html#determining-the-character-encoding

答案 1 :(得分:1)

如果没有找到字符集,那么它将从页面中读取一些HTML代码,然后尝试猜测编码。如果它无法弄明白,那么它将默认为浏览器的默认字符集。取决于浏览器,它通常类似于Windows-1252(Latin-1的超集,也称为ISO 8859-1)或UTF-8。

自己设置字符集很重要。存在漏洞(至少在IE的旧版本中),如果浏览器错误地猜测或使用其默认字符集,您可以提供将运行的浏览器恶意代码。

应始终在HTTP标头中进行设置,并在HTML中设置它永远不会受到伤害。

将其设置为标题通常由服务器完成。在Apache中,它通常在httpd.conf文件中完成,但也可以在.htaccess文件中完成:

AddCharset UTF-8 .php .html .css .js

...但它也可以在PHP中完成:

header('Content-Type:text/html;charset=utf-8');

在HTML中,您可以这样设置:

<meta charset="utf-8">

这就是HTML5的做法,但旧版浏览器对此非常了解。