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语法(4)
Oct 09 PHP
PHP与MySQL开发的8个技巧小结
Dec 17 PHP
PHP 获取MySQL数据库里所有表的实现代码
Jul 13 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
Feb 28 PHP
PHP mkdir()无写权限的问题解决方法
Jun 19 PHP
ThinkPHP中的常用查询语言汇总
Aug 22 PHP
php从csv文件读取数据并输出到网页的方法
Mar 14 PHP
php实现上传图片文件代码
Jul 19 PHP
PHP的反射机制实例详解
Mar 29 PHP
php生成0~1随机小数的方法(必看)
Apr 05 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
php时间戳转换代码详解
Aug 04 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
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
PHP 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
javascript引导程序
2008/10/26 Javascript
Javascript 中介者模式实例
2009/12/16 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
2015/09/06 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
详解Vue2.x-directive的学习笔记
2017/07/17 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
简单介绍使用Python解析并修改XML文档的方法
2015/10/15 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
Django中日期时间型字段进行年月日时分秒分组统计
2020/11/27 Python
python 实现汉诺塔游戏
2020/11/28 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
基于HTML5 的人脸识别活体认证的实现方法
2016/06/22 HTML / CSS
韩国家庭购物网上商店:Nsmall
2017/05/07 全球购物
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
应届大学生自荐信
2013/12/05 职场文书
计算机专业学生求职信分享
2013/12/15 职场文书
毕业设计计划书
2014/01/09 职场文书
社区庆八一活动方案
2014/02/02 职场文书
微信营销策划方案
2014/02/24 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
《开国大典》教学反思
2016/02/16 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书
CSS 一行代码实现头像与国旗的融合
2021/10/24 HTML / CSS
MySQL数据库简介与基本操作
2022/05/30 MySQL