笔记:PHP查询mysql数据后中文字符乱码
新建表Clubs CREATE TABLE `Clubs` ( `id` int ( 11 ) NOT NULL AUTO_INCREMENT, `name` varchar ( 30 ) CHARACTER SET utf8 NOT NULL DEFAULT '' , PRIMARY KEY (`id`)) ENGINE = MyISAM AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8 COLLATE = utf8_unicode
新建表Clubs
CREATE TABLE `Clubs` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) CHARACTER SET utf8 NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
id name
1 程序员
2 架构师
3 产品经理
4 测试
如果在phpMyAdmin中查看name字段内容就是?,修改MySQL 字符集选择UTF8,MySQL 连接校对选择utf8_general_ci
在mysql中查看字段内容为正确的中文字符后,通过mysql_query('select * from clubs')查询
用var_dump打印查询结果如下,所有的中文汉字都变成了?
array (size=4) 0 => array (size=2) 'id' => string '1' (length=1) 'name' => string '???' (length=3) 1 => array (size=2) 'id' => string '2' (length=1) 'name' => string '???' (length=3) 2 => array (size=2) 'id' => string '3' (length=1) 'name' => string '????' (length=4) 3 => array (size=2) 'id' => string '4' (length=1) 'name' => string '??' (length=2)
解决办法:在执行mysql_query之前先执行
mysql_query("set names utf8");
如果还不行,请确认php文件编码格式是否是utf8格式,同时在php文件头增加
header("Content-Type:text/html;charset=utf-8");
解决问题的根本办法就是把相关的编码格式都统一为utf8。
查询结果中文字符没问题了,但是$clubs转化为json时,name字段中文字符却又变了
$clubs=json_encode($clubs); echo($clubs);
输出内容如下
[{"id":"1","name":"\u7a0b\u5e8f\u5458"},{"id":"2","name":"\u67b6\u6784\u5e08"},{"id":"3","name":"\u4ea7\u54c1\u7ecf\u7406"},{"id":"4","name":"\u6d4b\u8bd5"}]
解决方案:
foreach ( $clubs as $key => $value ) { foreach($value as $k=>$v){ $clubs[$key][$k] = urlencode($v); } } $clubs=json_encode($clubs); echo(urldecode($clubs));
原因:
json_encode只支持UTF8编码的字符,使用JSON作为提交和接收的数据格式时,字符都采用UTF8编码处理,当我们的页面编码和数据库编码不是采用UTF8的时候,就极容易出现中文乱码的问题。解决办法是在用js或者PHP处理JSON数据的时候都采用UTF8的形式。
推荐阅读
-
设置MySql5.5数据库的字符编码为UTF8,解决中文乱码问题_MySQL
-
请教php+mysql中文字符乱码问题,麻烦大家给提提建议
-
PHP查询mysql,中文数据,通过不同方式添加的相同数据竟然显示不同解决方案
-
笔记:PHP查询mysql数据后中文字符乱码
-
mysql数据库中文乱码应该怎么解决,修改配置文件中的字符编码并没有作用
-
PHP+MySQL存储数据常见中文乱码问题小结,
-
php读取mysql中文数据出现乱码的解决方法_PHP教程
-
用php向Mysql数据库插入中文数据时数据库中显示乱码
-
PHP连接MySQL查询结果中文显示乱码解决方法
-
SQLServer乱码问题的分析及解决方法(中文字符被存入数据库后,显示为乱码)