剖析网页字符集的设置顺序
上个星期在为一个电子商务网站进行数据转移到新系统中的时候,发现一些产品描述字符老是输出乱码,确定是字符集的问题以后,对字符集再次进行了一次调研,确定了影响页面字符集的方式主要下面几种方式:
1. 文件的编码方式
2. Apache2的默认字符集设置
3. PHP.ini中的默认字符集的设置
4. PHP脚本中手动输出header(‘Content-type:text/html;charset=xxx’);
5. html页面中加入
我对以上五种方式都进行了一一测试,并且确定了5种方式对于浏览器字符集选择的优先级。首先我创建了一个以utf8编码的test.php文件,内容如下:
我使用chrome访问test.php, 因为我的chrome浏览器的默认字符集不是utf8,应该是gb2312或者gbk,所以我在浏览器中看到了如下乱码:
header与meta的优先级比较
接下来,先来测试以上的4,5两种方式。我向html页面中分别加入了,内容显示正常。
去掉header中的meta标签,加入header(‘Content-type:text/html;charset=utf8′);内容显示正常。那么,meta标签和header的方式,那个优先级高呢,我在页面里同时设置了这两项,header设置为gb2312, meta设置为utf8:
结果内容显示不正常,说明header的优先级高。浏览器先采用http头部中的字符集设置,然后是html页面中meta标签设置的字符集。
php.ini中设置默认字符集以后的影响
接下来,我们来看下在php.ini中设置默认字符集以后的情形。为了测试下优先级,我们先将页面中的header以及meta设置的字符集都改为gb2312,那么这样内容肯定显示为乱码。然后,我们打开php.ini文件,找到如下设置,去掉前面的引号,设置字符集为utf8:
设置好以后,记得要重启下apache2服务器,结果显示如下:
我们看到,在php.ini设置默认字符集为utf8以后,它被加入到了响应头Content-type末尾,从而覆盖了在php脚本中通过header函数输出的gb2312的字符集,浏览器根据该头部中的信息,认为内容是utf8的字符集,最后内容现实正常。由此可见,php.ini中字符集设置的优先级高于header函数以及meta标签。
apache2中设置默认字符集
最后,我们来设置下apache2中的默认字符集来测试下。这次将header,meta,php.ini中的字符集都设置为gb2312,然后在apache2设置默认字符集为utf8:
重启apache2服务器,内容显示如下:
由此可见,apache2中的字符集的设置没有影响到http响应中的Content-Type头部,所以浏览器认为应该用gb2312来解码,导致出现乱码。那么,如果去掉php.ini中的字符集的设置以后内,页面是否会显示正常。经过测试,显示如下:
看来,apache2中的字符集的优先级同样小于header函数的字符集设置。我们继续去掉header的设置看下:
以上证明,apache2中的字符集设置的优先级高于meta标签的字符集设置。charset=utf8加入到了http头部中。
综合上述实验,得出字符集设置优先级顺序: php.ini默认字符集设置 > header函数字符集设置 > apache2默认字符集设置 > meta标签字符集设置
建议继续学习:
- ORACEL RAC 字符集 (阅读:4681)
- linux下vim的编译以及终端乱码的最终解决方案 (阅读:3573)
- 区分一个包含汉字的字符串是 UTF-8 还是 GBK (阅读:3314)
- 如何在MYSQL5.5只支出utf8环境下正常使用GBK网站 (阅读:2871)
- oracle查看字符集 修改字符集 (阅读:2894)
- mysql latin1转utf8 的两种方法 (阅读:2486)
- mysql字符集和校验规则概念小介 (阅读:2297)
- mysql字符集与校验规则的设置 (阅读:2283)
- java中文乱码解决之道(一)—–认识字符集 (阅读:2503)
- mysql连接通道中的字符集和校验规则 (阅读:2203)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:360weboy 来源: 360weboy
- 标签: 字符集
- 发布时间:2013-07-08 22:45:40
- [70] Twitter/微博客的学习摘要
- [65] IOS安全–浅谈关于IOS加固的几种方法
- [65] 如何拿下简短的域名
- [64] find命令的一点注意事项
- [63] Go Reflect 性能
- [63] android 开发入门
- [61] 流程管理与用户研究
- [59] 图书馆的世界纪录
- [59] 读书笔记-壹百度:百度十年千倍的29条法则
- [59] Oracle MTS模式下 进程地址与会话信