php mysql字符集乱码问题

5 篇文章 0 订阅

新建表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的形式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值