我为 Windows 安装了 xampp 1.8.1,http://localhost/xampp
然后打开了 xampp 的索引页面。
内容类型的页面响应标头未指定字符集:
Content-Type:text/html
该页面的 html 也没有指定字符集。
在这种情况下,浏览器如何处理页面?
我为 Windows 安装了 xampp 1.8.1,http://localhost/xampp
然后打开了 xampp 的索引页面。
内容类型的页面响应标头未指定字符集:
Content-Type:text/html
该页面的 html 也没有指定字符集。
在这种情况下,浏览器如何处理页面?
如果页面以 UTF-8 或 UTF-16 字节顺序标记开头,则从那里获取编码。<meta>
这发生在查看 HTTP 标头和元素之前并且优先于查看。
如果也没有 BOM,则使用的编码取决于实现,并且很可能取决于用户碰巧在世界的哪个位置。
尽管如此,该阶段的所有变体实际上都与 ASCII 一致,因此如果页面内容仅包含 ASCII 字符,则不指定编码可能不会造成任何损害。
有关详细信息,请参阅http://www.w3.org/html/wg/drafts/html/master/syntax.html#determining-the-character-encoding。
如果没有找到字符集,那么它将从页面中读取一些 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 的处理方式,但较旧的浏览器可以很好地理解它。