php 各种应用乱码问题的解决方法


Posted in PHP onMay 09, 2010

1) 使用 标签设置页面编码

这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx 可以为 GB2312、GBK、UTF-8(和 MySQL 不同,MySQL 是 UTF8)等等。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。但是有的时候我们会发现有了这句还是不行,不管 xxx 是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。

请注意, 是属于 HTML 信息的,仅仅是一个声明,仅表明服务器已经把 HTML 信息传到了浏览器。

2) header("content-type:text/html; charset=xxx");

这个函数 header() 的作用是把括号里面的信息发到 http 标头。如果括号里面的内容为文中所说那样,那作用和 标签基本相同,大家对照第一个看发现字符都差不多的。但是不同的是如果有这段函数,浏览器就会永远采用你所要求的 xxx 编码,绝对不会不听话,因此这个函数是很有用的。为什么会这样呢?那就得说说 http 标头和 HTML信息的差别了:

http 标头是服务器以 http 协议传送 HTML 信息到浏览器前所送出的字串。而 标签是属于 HTML 信息的,所以 header() 发送的内容先到达浏览器,通俗点就是 header() 的优先级高于 (不知道可不可以这样讲)。假如一个 php 页面既有header("content-type:text/html;charset=xxx"),又有,浏览器就只认前者 http 标头而不认 meta 了。当然这个函数只能在 php 页面内使用。

同样也留有一个问题,为什么前者就绝对起作用,而后者有时候就不行呢?这就是接下来要谈的Apache 的原因了。

3) AddDefaultCharset

Apache 根目录的 conf 文件夹里,有整个 Apache 的配置文档 httpd.conf。

用文本编辑器打开 httpd.conf,第 708 行(不同版本可能不同)有 AddDefaultCharset xxx,xxx为编码名称。这行代码的意思:设置整个服务器内的网页文件 http 标头里的字符集为你默认的 xxx字符集。有这行,就相当于给每个文件都加了一行 header("content-type:text/html; charset=xxx")。这下就明白为什么明明 设置了是 utf-8,可浏览器始终采用 gb2312 的原因。

如果网页里有 header("content-type:text/html; charset=xxx"),就把默认的字符集改为你设置的字符集,所以这个函数永远有用。如果把 AddDefaultCharset xxx 前面加个"#",注释掉这句,而且页面里不含 header("content-type…"),那这个时候就轮到 meta 标签起作用了。

下面列出以上的优先顺序:

.. header("content-type:text/html; charset=xxx")

.. AddDefaultCharset xxx

..

如果你是 web 程序员,建议给你的每个页面都加个header("content-type:text/html;charset=xxx"),这样就可以保证它在任何服务器都能正确显示,可移植性也比较强。

4) php.ini 中的 default_charset 配置:

php.ini 中的 default_charset = "gb2312" 定义了 php 的默认语言字符集。一般推荐注释掉此行,让浏览器根据网页头中的 charset 来自动选择语言而非做一个强制性的规定,这样就可以在同台服务器上提供多种语言的网页服务。

PHP截取汉字乱码问题解决方法mb_substr函数的应用
mysql 中文乱码解决方法集锦

PHP 相关文章推荐
PHP 手机归属地查询 api
Feb 08 PHP
ThinkPHP自动验证失败的解决方法
Jun 09 PHP
php设计模式 Strategy(策略模式)
Jun 26 PHP
php设计模式 Delegation(委托模式)
Jun 26 PHP
phpcms模块开发之swfupload的使用介绍
Apr 28 PHP
深入phpMyAdmin的安装与配置的详细步骤
May 07 PHP
ThinkPHP实现将本地文件打包成zip下载
Jun 26 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
Nov 22 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
Oct 15 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
PHP+Ajax 检测网络是否正常实例详解
Dec 16 PHP
PHP封装请求类实例分析【基于Yii框架】
Oct 17 PHP
php 输出双引号"与单引号'的方法
May 09 #PHP
php for 循环语句使用方法详细说明
May 09 #PHP
php 函数使用方法与函数定义方法
May 09 #PHP
php 获取select下拉列表框的值
May 08 #PHP
PHP foreach循环使用详解与实例代码
May 08 #PHP
php 在文件指定行插入数据的代码
May 08 #PHP
php将数据库导出成excel的方法
May 07 #PHP
You might like
PHP 反向排序和随机排序代码
2010/06/30 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
点击文章内容处弹出页面代码
2009/10/01 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
2013/05/07 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
JS验证字符串功能
2017/02/22 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
vue移动端实现下拉刷新
2018/04/22 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
2018/12/02 Javascript
layui的面包屑或者表单不显示的解决方法
2019/09/05 Javascript
vue页面引入three.js实现3d动画场景操作
2020/08/10 Javascript
Python 元类使用说明
2009/12/18 Python
Python中的对象,方法,类,实例,函数用法分析
2015/01/15 Python
深入Python函数编程的一些特性
2015/04/13 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
Python 单元测试(unittest)的使用小结
2018/11/14 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
2019/06/19 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
简单了解python元组tuple相关原理
2019/12/02 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
自我评价范文点评
2013/12/04 职场文书
庆祝教师节演讲稿
2014/09/03 职场文书
培训讲师开场白
2015/06/01 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
MySQL如何构建数据表索引
2021/05/13 MySQL
Java使用JMeter进行高并发测试
2021/11/23 Java/Android
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android