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


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的库,结果发现很多东西
Dec 31 PHP
php 文章采集正则代码
Dec 28 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
Dec 17 PHP
使用symfony命令创建项目的方法
Mar 17 PHP
PHP的Yii框架中过滤器相关的使用总结
Mar 29 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
Apr 30 PHP
PHP多进程编程总结(推荐)
Jul 18 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
tp5框架的增删改查操作示例
Oct 31 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
Apr 26 PHP
php数值计算num类简单操作示例
May 15 PHP
PHP实现抽奖功能实例代码
Jun 30 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做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
php实现Linux服务器木马排查及加固功能
2014/12/29 PHP
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
基于jQuery的输入框无值自动显示指定数据的实现代码
2011/01/24 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
2013/01/17 Javascript
采用call方式实现js继承
2014/05/20 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
使用Bootstrap美化按钮实例代码(demo)
2017/02/03 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
js实现随机点名系统(实例讲解)
2017/10/18 Javascript
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
Vue 实现把表单form数据 转化成json格式的数据
2019/10/29 Javascript
js实现带有动画的返回顶部
2020/08/09 Javascript
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
[27:08]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第二场 11.21
2020/11/23 DOTA
python实现的一个p2p文件传输实例
2014/06/04 Python
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
2020/03/02 Python
keras的三种模型实现与区别说明
2020/07/03 Python
Python如何获取文件路径/目录
2020/09/22 Python
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
公司建议书怎么写
2014/05/15 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
岗位工作说明书
2014/07/29 职场文书
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
2015年办税服务厅工作总结
2015/07/23 职场文书
sql字段解析器的实现示例
2021/06/23 SQL Server