zoukankan      html  css  js  c++  java
  • 笔记: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_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":"u7a0bu5e8fu5458"},{"id":"2","name":"u67b6u6784u5e08"},{"id":"3","name":"u4ea7u54c1u7ecfu7406"},{"id":"4","name":"u6d4bu8bd5"}]

    解决方案:

    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的形式。

  • 相关阅读:
    TERSUS笔记员工信息409-修改
    TERSUS笔记员工信息408-查询
    TERSUS笔记员工信息407-07GO
    TERSUS笔记员工信息406-03首页
    TERSUS笔记员工信息405-04上一页
    TERSUS笔记员工信息404-05下一页
    TERSUS笔记员工信息403-06末页
    TERSUS笔记员工信息402-08每页条数逻辑
    layui 更新echarts版本后地图报错
    常用的CMS系统有哪些
  • 原文地址:https://www.cnblogs.com/kinglau/p/3904475.html
Copyright © 2011-2022 走看看