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


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 相关文章推荐
elgg 获取文件图标地址的方法
Mar 20 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
Nov 07 PHP
浅谈php中mysql与mysqli的区别分析
Jun 10 PHP
PHP is_subclass_of函数的一个BUG和解决方法
Jun 01 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
Dec 31 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
Apr 15 PHP
php中的异常和错误浅析
May 03 PHP
Django中的cookie与session操作实例代码
Aug 17 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
Feb 12 PHP
tp5.1 框架数据库高级查询技巧实例总结
May 25 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中的日期及时间
2006/11/23 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
对于PHP 5.4 你必须要知道的
2013/08/07 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
php实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
PHP读取mssql json数据中文乱码的解决办法
2016/04/11 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
javascript Event对象详解及使用示例
2013/11/22 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
深入浅析JavaScript中的RegExp对象
2017/09/18 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
2018/01/24 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
解决vue axios跨域 Request Method: OPTIONS问题(预检请求)
2020/08/14 Javascript
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
新手如何快速入门Python(菜鸟必看篇)
2017/06/10 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
python实现粒子群算法
2020/10/15 Python
关于HTML5的安全问题开发人员需要牢记的
2012/06/21 HTML / CSS
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
LivingSocial爱尔兰:爱尔兰本地优惠
2018/08/10 全球购物
Timberland俄罗斯官方网上商店:全球领先的户外品牌
2020/03/15 全球购物
我的网上商城创业计划书
2013/12/26 职场文书
关于毕业的中学校园广播稿
2014/01/26 职场文书
护士上岗前培训自我鉴定
2014/04/20 职场文书
建设幸福中国演讲稿
2014/09/11 职场文书
中学生打架检讨书
2014/10/13 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书