在写PHP 的WEB应用时,我们最长碰见的问题可能就是中文乱码问题了,前一段时间我在搭建自己博客的过程中,很不幸的也遇到了这个问题.
问题情景描述
当时我遇到的问题是这样的:
本地测试:
页面现实正常,MySQL数据中存储的中文是乱码.
服务器端测试:
页面显示出现乱码,数据库中存储的中文也是乱码.
注意:服务器端的数据是通过SQL文件导入的,当我尝试在服务器端执行写博客操作输入文章数据并提交后,页面显示的新添加的文章依然显示乱码
乱码原因分析:
web应用之所以会出现乱码问题,根本原因是各部分文件编码不一致造成的,像PHP对中文的编码方式,HTML对中文的编码方式,MySQL表的编码方式.这三种文件的不一致才是乱码问题的罪魁祸首.
乱码解决方法:
既然我们知道了这个问题,那么我们就让PHP,HTML,MySQL的编码方式保持一致.
我是按一下步骤来的:
- 在创建数据库和表的时候我已经选择了UTF-8的编码方式,但是数据表中的排列规则默认是latin1_swedish_ci,我把它调整为:utf8_general_ci.这样保证了MySQL数据库编码方式是utf-8.
- 在所有HTML代码的里面设置编码方式为utf-8.实现 代码为:
<meta charset="utf-8">
这样保证了HTML文件的编码方式为utf-8.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - 对于PHP文件,首先在每一个PHP文件的第一行添加
header("content-Type: text/html; charset=utf-8");
代码,以保证数据在通过HTTP传输时的编码为utf-8。然后是最关键的步骤: 在每一个执行数据库查询的PHP代码处设定MySQL数据与PHP的交互方式为utf-8实现代码为://设置读取数据库的数据编码格式
后面测试中,这两行代码保证了输入数据库中的数据是正常的。
mysql_query("set character set 'utf8'");//读库
mysql_query("set names 'utf8'");//写库
这三步完成后,在本地测试中的乱码问题就解决了。
然后我们将代码push到服务器端,然后删除服务器端原本的表,重新导出本地数据库,导入到服务器端数据库,这样就成功了。
下面是我的正常显示的博客地址:
博客地址:茂升快跑