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


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 相关文章推荐
杏林同学录(五)
Oct 09 PHP
php时间不正确的解决方法
Apr 09 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 PHP
PHP持久连接mysql_pconnect()函数使用介绍
Feb 05 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
Nov 12 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
Mar 18 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
May 27 PHP
PHP常见的6个错误提示及解决方法
Jul 07 PHP
Smarty日期时间操作方法示例
Nov 15 PHP
一次因composer错误使用引发的问题与解决
Mar 06 PHP
微信JSSDK分享功能图文实例详解
Apr 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安全技术之 实现php基本安全
2010/09/04 PHP
为PHP初学者的8点有效建议
2010/11/20 PHP
超小PHP小马小结(方便查找后门的朋友)
2012/05/05 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
WordPress主题制作之模板文件的引入方法
2015/12/28 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
javascript 拖动表格行实现代码
2011/05/05 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
推荐25个超炫的jQuery网格插件
2014/11/28 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
2015/09/04 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
Node.js实现数据推送
2016/04/14 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
Vue之Watcher源码解析(1)
2017/07/19 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
2019/05/14 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
在SSM框架下用laypage和ajax实现分页和数据交互的方法
2019/09/27 Javascript
p5.js码绘“跳动的小正方形”的实现代码
2019/10/22 Javascript
详细解析Python中的变量的数据类型
2015/05/13 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
python实现淘宝秒杀脚本
2020/06/23 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
Python datetime模块使用方法小结
2020/06/18 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
澳大利亚首屈一指的鞋类品牌:Tony Bianco
2018/03/13 全球购物
高中生学习的自我评价
2013/12/14 职场文书
装修五一活动策划案
2014/01/23 职场文书
生产厂长岗位职责
2014/02/21 职场文书
有关浪费资源的建议书
2015/09/14 职场文书
python微信智能AI机器人实现多种支付方式
2022/04/12 Python