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


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 配置open_basedir 让各虚拟站点独立运行
Nov 12 PHP
FirePHP 推荐一款PHP调试工具
Apr 23 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
Jan 10 PHP
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
Jun 05 PHP
使用php伪造referer的方法 利用referer防止图片盗链
Jan 20 PHP
PHP实现无限极分类图文教程
Nov 25 PHP
thinkphp配置连接数据库技巧
Dec 02 PHP
php随机获取金山词霸每日一句的方法
Jul 09 PHP
分享10段PHP常用代码
Nov 11 PHP
分享50个提高PHP执行效率的技巧
Dec 26 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
Nov 09 PHP
浅谈PHP进程管理
Mar 08 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/01/03 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
2014/05/10 PHP
PHP实现的简单日历类
2014/11/29 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
JS启动应用程序的一个简单例子
2008/05/11 Javascript
javascript 定义新对象方法
2010/02/20 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
javascript学习笔记(九) js对象 设计模式
2012/06/19 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
2013/09/24 Javascript
jquery操作select详解(取值,设置选中)
2014/02/07 Javascript
node.js中的fs.symlinkSync方法使用说明
2014/12/15 Javascript
js获取微信版本号的方法
2015/05/12 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
2016/07/22 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
基于Vue实现页面切换左右滑动效果
2020/06/29 Javascript
JavaScript正则表达式和级联效果
2017/09/14 Javascript
AngularJs 禁止模板缓存的方法
2017/11/28 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
vue实现的下拉框功能示例
2019/01/29 Javascript
使用 Element UI Table 的 slot-scope方法
2019/10/10 Javascript
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
python通过smpt发送邮件的方法
2015/04/30 Python
python中print的不换行即时输出的快速解决方法
2016/07/20 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
总经理秘书工作职责
2013/12/26 职场文书
社区中秋节活动方案
2014/01/29 职场文书
学生会招新策划书
2014/02/14 职场文书
学习十八大演讲稿
2014/09/15 职场文书
群众路线教育实践活动实施方案
2014/10/31 职场文书
用position:sticky完美解决小程序吸顶问题的实现方法
2021/04/24 HTML / CSS
分享几个实用的CSS代码块
2022/06/10 HTML / CSS