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


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 文件上传进度条的两种实现方法的代码
Nov 25 PHP
php 读取文件乱码问题
Feb 20 PHP
解析dedeCMS验证码的实现代码
Jun 07 PHP
php遍历文件夹所有文件子文件夹函数代码
Nov 27 PHP
php的一个简单加密解密代码
Jan 14 PHP
PHP实现WebService的简单示例和实现步骤
Mar 27 PHP
php计算整个目录大小的方法
Jun 19 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
Mar 17 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
Feb 24 PHP
ThinkPHP实现附件上传功能
Apr 27 PHP
Laravel 登录后清空COOKIE的操作方法
Oct 14 PHP
PHP实现常用排序算法的方法
Feb 05 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生成静态页面分析 模板+缓存+写文件
2009/08/17 PHP
php checkbox 取值详细说明
2010/08/19 PHP
PHP mcrypt可逆加密算法分析
2011/07/19 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
iframe里使用JavaScript控制主页转向的方法
2015/04/03 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
2016/08/11 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
微信小程序checkbox组件使用详解
2018/01/31 Javascript
Angular4集成ng2-file-upload的上传组件
2018/03/14 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
python基于Selenium的web自动化框架
2019/07/14 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
网页中的电话号码如何实现一键直呼效果_附示例
2016/03/15 HTML / CSS
Merrell迈乐澳大利亚网站:购买户外登山鞋
2017/05/28 全球购物
民主评议党员个人总结
2015/02/13 职场文书
新人入职感言
2015/07/31 职场文书
golang 比较浮点数的大小方式
2021/05/02 Golang
Python实现文字pdf转换图片pdf效果
2022/04/03 Python