页面乱码问题的根源及其分析


Posted in PHP onAugust 09, 2013

首先, 关闭PHP配置文件php.ini中的default_charset:
1. 页面没有指定charset , Apache配置defaultcharst gbk , 页面文件编码是utf-8
结果: 乱码,使用wireshark抓包,发现服务器返回的header中指明了:

Content-Type:text/html;charset=GB

结论:当页面没有指明charset的时候,Apache的defaultcharset起作用

2. 页面指定charset为utf-8, Apache配置defaultcharset gbk. 页面文件是utf-8

<head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
        <div id="page-header">
         测试Apache DefaultCharset
        </div>
</body>
</html>

结果还是出现乱码。
结论:当Apache配置了DefaultCharset, 将忽略页面的charset申明。

3. PHP header申明charset为utf8, Apache配置defaultcharst gbk,页面文件编码是utf8

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

结果 : 页面显示正常。

4 Apache设置DefaultCharset off
结果,页面显示正常。

翻阅了下Apache2的手册:
AddDefaultCharset指令
说明当应答内容是text/plain或text/html时,在HTTP应答头中加入的默认字符集
语法AddDefaultCharsetOn|Off|charset
默认值AddDefaultCharsetOff
作用域serverconfig,virtualhost,directory,.htaccess
覆盖项FileInfo
状态核心(C)
模块core
当且仅当应答内容是text/plain或text/html时,此指令将会在HTTP应答头中加入的
默认字符集。理论上这将覆盖在文档体中通过<meta>标 签指定的字符集,但是实际
的行为通常取决于用户浏览器的设置。AddDefaultCharsetOff将会禁用此功能。
AddDefaultCharsetOn将启用Apache内部的默认字符集iso-8859-1。您
也可以指定使用在IANA注册过的字符集名字 中的另外一个charset。
比如说:
AddDefaultCharsetutf-8

也就是说,当Apache不指定defaultcharset的时候,页面编码由页面自己的meta标签指定。
当Apache指定的时候,将忽略页面中的meta标签指定的编码. 但是容许脚本直接header编码方式给客户端

最后,还有一个问题没有得出结果:
当Apache和页面都没有指定的时候, 又如何?
我在自己的机器上,如果都不指定, 默认还是utf8.

PHP 相关文章推荐
测试PHP连接MYSQL成功与否的代码
Aug 16 PHP
php json转换成数组形式代码分享
Nov 10 PHP
简单谈谈php中ob_flush和flush的区别
Nov 27 PHP
php计算指定目录下文件占用空间的方法
Mar 13 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
Oct 14 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
Mar 31 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
Apr 05 PHP
详解yii2使用多个数据库的案例
Jun 16 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
PHP使用mongoclient简单操作mongodb数据库示例
Feb 08 PHP
php输出形式实例整理
May 05 PHP
PHP执行普通shell命令流程解析
Aug 24 PHP
浅析PHP原理之变量(Variables inside PHP)
Aug 09 #PHP
浅析PHP原理之变量分离/引用(Variables Separation)
Aug 09 #PHP
php中如何使对象可以像数组一样进行foreach循环
Aug 09 #PHP
php接口与接口引用的深入解析
Aug 09 #PHP
解析数组非数字键名引号的必要性
Aug 09 #PHP
php防注入及开发安全详细解析
Aug 09 #PHP
分割GBK中文遭遇乱码的解决方法
Aug 09 #PHP
You might like
php中使用接口实现工厂设计模式的代码
2012/06/17 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
2014/09/22 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
2015/04/07 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
2016/09/19 PHP
Javascript实例教程(19) 使用HoTMetal(6)
2006/12/23 Javascript
JavaScript 无符号右移运算符
2009/04/17 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
利用JQuery和Servlet实现跨域提交请求示例分享
2014/02/12 Javascript
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
jquery实现右键菜单插件
2015/03/29 Javascript
深入浅析JS的数组遍历方法(推荐)
2016/06/15 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
2017/03/21 jQuery
EasyUI Tree树组件无限循环的解决方法
2017/09/27 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
npm的lock机制解析
2019/06/20 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
Python中类的继承代码实例
2014/10/28 Python
Python性能提升之延迟初始化
2016/12/04 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
python tkinter控件布局项目实例
2019/11/04 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
ABOUT YOU罗马尼亚:超过600个时尚品牌
2019/09/19 全球购物
工程造价管理专业大专生求职信
2013/10/06 职场文书
物流专业大学生的自我鉴定
2013/11/13 职场文书
出纳员岗位职责风险
2014/03/06 职场文书
校园安全主题班会
2015/08/12 职场文书
2016五一手机促销广告语
2016/01/28 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python