PHP与MySQL开发中页面乱码的产生与解决


Posted in PHP onMarch 27, 2008

1、文件编码:指的是页面文件(.html,.php等)本身是以何种编码来保存的。记事本和Dreamweaver在打开页面时候会自动识别文件编码因而不太会出问题。而ZendStudio却不会自动识别编码,它只会根据首选项的配置固定以某种编码打开文件,如果工作时候一不注意,用错误编码打开文件,做了修改之后一保存,乱码就出现了(我深有体会)。

2、页面申明编码:在HTML代码HEAD里面,可以用<meta http-equiv="Content-Type" content="text/html; charset="XXX" />来告诉浏览器网页采用了什么编码,目前中文网站开发中XXX主要用的是GB2312和UTF-8两种编码。

3、数据库连接编码:指的是进行数据库操作时候以哪种编码与数据库传输数据,这里需要注意的是不要与数据库本身的编码混淆,比如MySQL内部默认是latin1编码,也就是说Mysql是以latin1编码来存储数据,以其他编码传输给Mysql的数据会被转换成latin1编码。

知道了WEB开发中哪些地方涉及到了编码,也就知道了乱码产生的原因:上述3项编码设置不一致,由于各种编码绝大部分是兼容ASCII的,所以英文符号不会出现,中文就倒霉了。下面是一些常见的错误情况与解决:

1、数据库采用UTF8编码,而页面申明编码是GB2312,这是最常见的产生乱码的原因。这时候在PHP脚本里面直接Select数据出来的就是乱码,需要在查询前先使用:

mysql_query("SET NAMES GBK"); 

来设定MYSQL连接编码,保证页面申明编码与这里设定的连接编码一致(GBK是GB2312的扩展)。如果页面是UTF-8编码的话,可以用:

mysql_query("SET NAMES UTF8"); 

注意是UTF8而不是一般用的UTF-8。假如页面申明的编码与数据库内部编码一致可以不设定连接编码。
注:事实上MYSQL的数据输入输出比上面讲的更复杂一些,MYSQL配置文件my.ini中定义了2个默认编码,分别是[client]里的default -character-set和[mysqld]里的default-character-set来分别设定默认时候客户端连接和数据库内部所采用的编码。我们上面指定的编码其实是MYSQL客户端连接服务器时候的命令行参数character_set_client,来告诉MYSQL服务器接受到的客户端数据是什么编码的,而不是采用默认编码。

2、页面申明编码与文件本身编码不一致,这种情况很少发生,因为如果编码不一致美工做页面时候在浏览器看到的就是乱码了。更多时候是发布以后修改一些小BUG,以错误编码打开页面然后保存导致的。或者是用某些FTP软件直接在线修改文件,比如CuteFTP,由于软件编码配置错误而导致转换错了编码。

3、一些租用虚拟主机的朋友,明明上述3项编码都设置正确了还是有乱码。比方说网页是GB2312编码的,IE等浏览器打开却总是识别成UTF-8,网页HEAD里面已经申明是GB2312了,手动修改浏览器编码为GB2312后页面显示正常。产生原因是服务器Apache设定了服务器全局的默认编码,在httpd.conf里面加了AddDefaultCharset UTF-8。这时候服务器会首先发送HTTP头给浏览器,其优先级比页面里申明编码高,自然浏览器就识别错了。解决办法有2个,请管理员在配置文件自己的虚机里加上一条AddDefaultCharset GB2312来覆盖全局配置,或者在自己目录的.htaccess里配置。

PHP 相关文章推荐
php下的权限算法的实现
Apr 28 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
Aug 01 PHP
thinkphp 多表 事务详解
Jun 17 PHP
php数据库备份还原类分享
Mar 20 PHP
PHP调用VC编写的COM组件实例
Mar 29 PHP
thinkphp3.x中session方法的用法分析
May 20 PHP
PHP常用函数总结(180多个)
Dec 25 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
Feb 15 PHP
利用php的ob缓存机制实现页面静态化方法
Jul 09 PHP
PHP快速排序算法实现的原理及代码详解
Apr 03 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
Apr 10 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 PHP
php中cookie的作用域
Mar 27 #PHP
简单的PHP图片上传程序
Mar 27 #PHP
php中变量及部分适用方法
Mar 27 #PHP
php Undefined index和Undefined variable的解决方法
Mar 27 #PHP
php.ini中的php-5.2.0配置指令详解
Mar 27 #PHP
一家之言的经验之谈php+mysql扎实个人基本功
Mar 27 #PHP
php部分常见问题总结
Mar 27 #PHP
You might like
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
php中$_GET与$_POST过滤sql注入的方法
2014/11/03 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
PHP进阶学习之命名空间基本用法分析
2019/06/18 PHP
document.documentElement &amp;&amp; document.documentElement.scrollTop
2007/12/01 Javascript
jquery创建div 实现代码
2009/04/27 Javascript
js 未结束的字符串常量错误解决方法
2010/06/13 Javascript
基于jquery的jqDnR拖拽溢出的修改
2011/02/12 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
2011/07/04 Javascript
js简单实现竖向tab选项卡的方法
2015/05/04 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
使用vue.js实现联动效果的示例代码
2017/01/10 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
2017/07/24 Javascript
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
判断“命令按钮”是否被鼠标单击详解
2019/07/31 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
Django在pycharm下修改默认启动端口的方法
2019/07/26 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
2020/11/29 Python
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
基层干部十八大感言
2014/01/19 职场文书
乡镇镇长个人整改措施
2014/10/01 职场文书
优秀员工事迹材料
2014/12/20 职场文书
投标邀请书范本
2015/02/02 职场文书
党员证明信
2015/06/19 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
HTML常用标签超详细整理
2022/03/19 HTML / CSS
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS