关于使用php和mysql出现中文乱码的问题,网上有诸多的讨论。相信能够解决大部分的问题。
我遇到的情况有点特殊:
网站已经在运行,有一定的数据量,原来的文件和程序编码都是用的GBK,数据库用的utf-8,现在要把文件和程序的编码都转换成utf-8.
首先我把所有的文件编码和程序编码都转换成了utf-8,这个过程中没出现什么问题。
然后运行的时候,发现查询出来的数据都成了乱码,整了大半天也没解决。
网页上不是通过数据查询出来的汉字都能正确的显示,所以一定是查询数据的问题。
看到有人说mysql数据的Insert和Select使用的编码是不一样的,而我的程序对这一方面没有做过处理。
试着添加了一条新的纪录,发现查询出来是正常的编码。
偶想原来的文件都是GBK的,提交的数据是不是也存储成了GBK,看phpmyadmin中也都都是乱码。
按照这个思路,我写了个小程序,把含有中文的字段中的字符都转成utf-8,问题解决了,而且在phpmyadmin中看到的也是中文了。
现在把代码贴出来,分享一下:
- <?php
- //连接数据库
- $link = mysql_connect('localhost', 'xxxx', 'xxxx');
-
- if (!$link) {
- die('数据库连接失败.' . mysql_error());
- }
- mysql_select_db("xxxx");
-
- $sql="select * from table";
- $result = mysql_query($sql) or die('数据库查询失败.'.mysql_error());
-
- $oldresult=array();
-
- $i=0;
-
- while($tmp=mysql_fetch_array($result)){
- $oldresult[$i][0]=$tmp["id"];
- $oldresult[$i][1]=$tmp["title"];
- $oldresult[$i][2]=$tmp["content"];
- $oldresult[$i][3]=$tmp["tags"];
- $i+=1;
- }
-
- foreach ($oldresult as $tmprs) {
- $id=$tmprs[0];
- $title=iconv("GBK","UTF-8",$tmprs[1]);
- $content=iconv("GBK","UTF-8",$tmprs[2]);
- $tags=iconv("GBK","UTF-8",$tmprs[3]);
-
- mysql_query('set character_set_client = utf8');
- mysql_query('set character_set_connection = utf8');
- mysql_query('set character_set_results = utf8');
-
- $sql="update table set title='".$title."',content='".$content."',tags='".$tags."' where id=".$id;
-
- mysql_query($sql);
- }
- ?>
|