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


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木马攻击防御之道
Mar 24 PHP
php in_array 函数使用说明与in_array需要注意的地方说明
Apr 13 PHP
PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
Dec 07 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
Jun 03 PHP
PHP读取文件内容后清空文件示例代码
Mar 18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
Jun 23 PHP
PHP从FLV文件获取视频预览图的方法
Mar 12 PHP
如何通过Linux命令行使用和运行PHP脚本
Jul 29 PHP
PHP通过加锁实现并发情况下抢码功能
Aug 10 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
详细解读php的命名空间(二)
Feb 21 PHP
PHP时间相关常用函数用法示例
Jun 03 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 应用程序安全防范技术研究
2009/09/25 PHP
php选择排序法实现数组排序实例分析
2015/02/16 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
两个DIV等高的JS的实现代码
2007/12/23 Javascript
一个tab标签切换效果代码
2009/03/27 Javascript
jquery设置控件位置的方法
2013/08/21 Javascript
理解Javascript闭包
2013/11/01 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
js单独获取一个checkbox看其是否被选中
2014/09/22 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
vue.js项目 el-input 组件 监听回车键实现搜索功能示例
2018/08/25 Javascript
angular5 子组件监听父组件传入值的变化方法
2018/09/30 Javascript
JavaScript中十种一步拷贝数组的方法实例详解
2019/04/22 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
Python Web版语音合成实例详解
2019/07/16 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
Python线程指南分享
2019/11/19 Python
Python编程快速上手——正则表达式查找功能案例分析
2020/02/28 Python
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
测试时代收集的软件测试面试题
2013/09/25 面试题
师范生教师实习自我鉴定
2013/09/27 职场文书
党支部公开承诺书
2014/03/28 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
无锡灵山大佛导游词
2015/02/09 职场文书
高校自主招生教师推荐信
2015/03/23 职场文书
工作失职检讨书范文
2015/05/05 职场文书
人工作失职检讨书
2015/05/05 职场文书
2015年远程教育工作总结
2015/05/20 职场文书
Appium中scroll和drag_and_drop根据元素位置滑动
2022/02/15 Python
oracle重置序列从0开始递增1
2022/02/28 Oracle