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与javascript的两种交互方式
Oct 09 PHP
在PHP3中实现SESSION的功能(二)
Oct 09 PHP
需要发散思维学习PHP
Jun 29 PHP
国外比较好的几个的Php开源建站平台小结
Apr 22 PHP
Server.HTMLEncode让代码在页面里显示为源代码
Dec 08 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
Jun 08 PHP
推荐十款免费 WordPress 插件
Mar 24 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
Nov 24 PHP
php删除数组中重复元素的方法
Dec 22 PHP
php blowfish加密解密算法
Jul 02 PHP
PHP解压ZIP文件到指定文件夹的方法
Nov 17 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
Jul 03 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仿盗链代码
2012/06/03 PHP
关于PHP自动判断字符集并转码的详解
2013/06/26 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
2018/06/01 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
PHP获取HTTP body内容的方法
2018/12/31 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
DLL+ ActiveX控件+WEB页面调用例子
2010/08/07 Javascript
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
2016/11/17 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
浅谈Node Inspector 代理实现
2017/10/19 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
2020/02/09 Javascript
javascript 内存模型实例详解
2020/04/18 Javascript
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
Python中类型关系和继承关系实例详解
2015/05/25 Python
python创建文件备份的脚本
2018/09/11 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
利用python实现逐步回归
2020/02/24 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
Pytest测试框架基本使用方法详解
2020/11/25 Python
详解html5 shiv.js和respond.min.js
2018/01/24 HTML / CSS
学生会离职感言
2014/02/11 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
先进工作者事迹材料
2014/12/23 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书