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读取数据库信息的几种方法
May 24 PHP
php_xmlhttp 乱码问题解决方法
Aug 07 PHP
PHP Memcached应用实现代码
Feb 08 PHP
thinkphp 多表 事务详解
Jun 17 PHP
php学习笔记之基础知识
Nov 08 PHP
浅析iis7.5安装配置php环境
May 10 PHP
帝国cms目录结构分享
Jul 06 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
Apr 21 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
PHP获取MySQL执行sql语句的查询时间方法
Aug 21 PHP
php链式操作的实现方式分析
Aug 12 PHP
通过PHP实现用户注册后邮箱验证激活
Nov 10 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获取用户浏览器版本的方法
2015/01/03 PHP
thinkPHP自动验证机制详解
2016/12/05 PHP
详解EventDispatcher事件分发组件
2016/12/25 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
JS实现的input选择图片本地预览功能示例
2018/08/29 Javascript
深入理解webpack process.env.NODE_ENV配置
2020/02/23 Javascript
JS制作简易计算器的实例代码
2020/07/04 Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
2020/09/07 Javascript
微信小程序实现转盘抽奖
2020/09/21 Javascript
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
Python 逐行分割大txt文件的方法
2017/10/10 Python
浅谈python函数之作用域(python3.5)
2017/10/27 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
2017/12/18 Python
Python enumerate索引迭代代码解析
2018/01/19 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
python读取中文txt文本的方法
2018/04/12 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
PyQt5 多窗口连接实例
2019/06/19 Python
Python实现一个带权无回置随机抽选函数的方法
2019/07/24 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
2019/08/12 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
pytorch SENet实现案例
2020/06/24 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
中国一家专注拼团的社交购物网站:拼多多
2018/06/13 全球购物
《一件运动衫》教学反思
2014/02/19 职场文书
迎新春趣味活动方案
2014/08/24 职场文书
车贷收入证明范本
2014/09/14 职场文书
通讯稿范文
2015/07/22 职场文书
如何用PHP实现多线程编程
2021/05/26 PHP