0

0

剖析网页字符集的设置顺序

php中文网

php中文网

发布时间:2016-06-23 14:17:13

|

1330人浏览过

|

来源于php中文网

原创

字符集

作者:360weboy
新浪微博:http://weibo.com/360weboy
博文链接: http://www.360weboy.com/php/fundament/charset.html

上个星期在为一个电子商务网站进行数据转移到新系统中的时候,发现一些产品描述字符老是输出乱码,确定是字符集的问题以后,对字符集再次进行了一次调研,确定了影响页面字符集的方式主要下面几种方式:
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标签字符集设置

回复讨论(解决方案)

这个结果不太认同

测试有局限性
1.只使用了单一浏览器测试
2.只使用了一种语系测试
3.只使用了单一文件编码测试

最大的问题是所有测试都是正向测试,就是符合预期就认为该项是正确的,这是逻辑大忌

为什么实验过程没有问题,但得出的结论是错误的呢?
经测试:
default_charset 的优先级小于 header 函数字符集设置

优先级的顺序根据我和朋友的测试是对的,请自己核对。

snmr_com

请指教,你知道测试问题所在,那么能不能说下,这个过程应该怎么测试才算标准。。多谢!

http://www.w3help.org/zh-cn/causes/HR9001
可以参考这边文章,但这文章也比较旧了

你用的是归纳法推导,完全归纳法的基础就是满足所有的可能性得出一致(唯一)结论
并且,因为你的这个命题各种可能性并非符合“良序”特性,不能用数学归纳法那样的两步求证
所以,你要做测试就要遍历所有的可能性,如果没有遍历所有可能性,那么结论就只能增加限定条件
例如
只涉及一种浏览器,结论就只能缩小到该浏览器
原文档只使用了一种编码,那结论也只能适用于这种编码

基本上增加了两三个限定条件,结论就没有太大的实用意义,因为适用范围变得很小了
所以还是要做更多的测试以支持你的结论才行
你命题涉及的条件有:浏览器、各优先级的编码指定、语系(特别是较难自动识别的不同语系,如同是双字节中日韩编码)、文档编码,做一个排列组合,可能性就相当多了……如果能全部测试一遍,还是相当佩服你的,呵呵

专业的理论指导,兄弟佩服。。。有时间再完整的走一遍。。多谢回复

优先级的顺序根据我和朋友的测试是对的,请自己核对。 php.ini



运行界面


你测试的结果并不代表我测试的结果
何况 header 就该能改变相关预设值,否则还要他干什么?

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

33

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

32

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

36

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

7

2026.01.31

漫画防走失登陆入口大全
漫画防走失登陆入口大全

2026最新漫画防走失登录入口合集,汇总多个稳定可用网址,助你畅享高清无广告漫画阅读体验。阅读专题下面的文章了解更多详细内容。

11

2026.01.31

php多线程怎么实现
php多线程怎么实现

PHP本身不支持原生多线程,但可通过扩展如pthreads、Swoole或结合多进程、协程等方式实现并发处理。阅读专题下面的文章了解更多详细内容。

1

2026.01.31

php如何运行环境
php如何运行环境

本合集详细介绍PHP运行环境的搭建与配置方法,涵盖Windows、Linux及Mac系统下的安装步骤、常见问题及解决方案。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php环境变量如何设置
php环境变量如何设置

本合集详细讲解PHP环境变量的设置方法,涵盖Windows、Linux及常见服务器环境配置技巧,助你快速掌握环境变量的正确配置。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php图片如何上传
php图片如何上传

本合集涵盖PHP图片上传的核心方法、安全处理及常见问题解决方案,适合初学者与进阶开发者。阅读专题下面的文章了解更多详细内容。

2

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML 中文开发手册
HTML 中文开发手册

共0课时 | 0人学习

Web前端入门基础教程
Web前端入门基础教程

共251课时 | 34.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号