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


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的ASP防火墙
Oct 09 PHP
详解PHP显示MySQL数据的三种方法
Jun 05 PHP
PHP PDOStatement:bindParam插入数据错误问题分析
Nov 13 PHP
PHP5.5和之前的版本empty函数的不同之处
Jun 13 PHP
php常用的url处理函数总结
Nov 19 PHP
php简单定时执行任务的实现方法
Feb 23 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
Mar 21 PHP
thinkphp框架实现删除和批量删除
Jun 29 PHP
PHP入门教程之面向对象基本概念实例分析
Sep 11 PHP
phpcms中的评论样式修改方法
Oct 21 PHP
如何在PHP中读写文件
Sep 07 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
2019十大人气国漫
2020/03/13 国漫
建立文件交换功能的脚本(一)
2006/10/09 PHP
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
浅析php header 跳转
2013/06/17 PHP
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
Mootools 1.2教程 事件处理
2009/09/15 Javascript
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
原生javascript实现的分页插件pagenav
2014/08/28 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
2017/03/06 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
2019/04/30 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
2019/05/14 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
Node.js操作MongoDB数据库实例分析
2020/01/19 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
详解Python异常处理中的Finally else的功能
2017/12/29 Python
基于TensorFlow常量、序列以及随机值生成实例
2020/01/04 Python
python异常处理try except过程解析
2020/02/03 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
理肤泉俄罗斯官网:La Roche-Posay俄罗斯
2018/07/24 全球购物
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
结构工程个人自荐信范文
2013/11/30 职场文书
医药专业应届毕业生求职信范文
2014/01/01 职场文书
节约用水倡议书
2014/04/16 职场文书
2016春季运动会通讯稿
2015/07/18 职场文书
浅谈如何提高PHP代码的质量
2021/05/28 PHP