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调用数据库的存贮过程
Oct 09 PHP
AJAX for PHP简单表数据查询实例
Jan 02 PHP
深入理解require与require_once与include以及include_once的区别
Jun 05 PHP
探讨php中遍历二维数组的几种方法详解
Jun 08 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
php读取mysql的简单实例
Jan 15 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
Yii使用ajax验证显示错误messagebox的解决方法
Dec 03 PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 PHP
利用PHP将图片转换成base64编码的实现方法
Sep 13 PHP
PHP数据对象PDO操作技巧小结
Sep 27 PHP
PHP使用数组实现矩阵数学运算的方法示例
May 29 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 不同编码下的字符串长度区分
2009/09/26 PHP
PHP将DateTime对象转化为友好时间显示的实现代码
2011/09/20 PHP
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
PHP引用(&)各种使用方法实例详解
2014/03/20 PHP
php实现的替换敏感字符串类实例
2014/09/22 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
浅谈php的优缺点
2015/07/14 PHP
通过PHP设置BugFree获取邮箱通知
2019/04/25 PHP
用jquery来定位
2007/02/20 Javascript
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
2017/09/25 Javascript
解决JQuery全选/反选第二次失效的问题
2017/10/11 jQuery
Angular实现较为复杂的表格过滤,删除功能示例
2017/12/23 Javascript
webpack构建的详细流程探底
2018/01/08 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
python中nan与inf转为特定数字方法示例
2017/05/11 Python
python中matplotlib的颜色及线条控制的示例
2018/03/16 Python
Python中多个数组行合并及列合并的方法总结
2018/04/12 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
2020/01/02 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
python下对hsv颜色空间进行量化操作
2020/06/04 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
《花的勇气》教后反思
2014/02/12 职场文书
MySql学习笔记之事务隔离级别详解
2021/05/12 MySQL