Archive for August, 2008

搞定PHP+MYSQL中文乱码问题(转)

在Google上找了很久,大部分的看似很牛的文章都没解决我的问题,但这篇搞定了,解决的很彻底,转自http://i-cando.cn/blogcn/topic.php?id=54:

 PS:我要解决的是用GB2312编码进行通讯,将下述utf8改为gb2312即可并注意将下述单引号改为键盘第二排的第一个字符`.

先讲下两个字符集的区别:

gb2312是标准中文字符集。

UTF-8 是 UNICODE 的一种变长字符编码,即 RFC 3629,可以解决多种语言文本显示问题,从而实现应用国际化和本地化。 UTF-8 是字节顺序无关的,它的字节顺序在所有系统中都是一样的,排序更加容易。因此 UTF-8 具有更高的性能。

不过如果是纯英文的话,用什么都可以,用GB2312也没问题。

再分析下出现乱码的原因

mysql+php产生乱码原因:
1. mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码.
2. MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码.
3. MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码.
4. 用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成PHP页面乱码.
5. 如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成PHP页面乱码.
6. PHP页面字符集不正确.
7. PHP连接MYSQL数据库语句指定的编码不正确.
最后讲 根治 的处方:
拿UTF8来举例

1、 保证页面的编码
如果是html 那么别忘了在 文件开头写上

<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
如果是 php那么 记得在文件最上方写上

lzy © 2008, View php source

  1. header(“Content-type: text/html;charset=utf-8″);

Parsed in 0.021 seconds

保证文件的编码必须是 UTF-8
解决方法 (1)把你的文件用记事本打开 ,选文件另存为,在文件名的下面有个编码  看看字符集是不是UTF-8 如果不是请修改

2、 保证数据库是UTF8
在添加表的时候  需要设置编码为 UTF8
如果已经添加了 那么可以
在PHPMYADMIN 中查看表结构  的‘整理’属性上 是否为 utf8_general_ci
如果不是 请修改

lzy © 2008, View php source

  1.  

  2. ALTER TABLE ‘gbook’ DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

  3.  

Parsed in 0.049 seconds

数据库和字段 的编码同理:

lzy © 2008, View php source

  1.  

  2. ALTER DATABASE ‘testdata’ DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

  3. ALTER TABLE ‘ testdata’ CHANGE ‘test’ ‘test’ VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin

Parsed in 0.118 seconds

3、 PHP在连接数据库的时候加上一句:set names utf8

lzy © 2008, View php source

  1.  

  2. mysql_connect(‘localhost’,‘user’,‘password’);

  3. mysql_select_db(‘mydb’);

  4. mysql_query(“set names utf8;”);//**设置字符集***

  5.  

Parsed in 0.081 seconds

这样就做到万无一失了,如果还有什么问题 大家可以给我留言 我会及时回复的

Comments (1)