编码 - 我用PHP从mysql取出数据然后转Json,但是为什么中文显示的是问号?

查看:71
本文介绍了编码 - 我用PHP从mysql取出数据然后转Json,但是为什么中文显示的是问号?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题


上面的是我数据库存的数据,采用的utf8_bin编码,开始的时候用的是utf8_unicode_ci,可是还是不行
下面是我的PHP代码

<?php

header('Content-Type:application/json;charset=utf-8');

//定义常量参数
define('DB_HOST','localhost');
define('DB_USER','root');
define('DB_PWD','root');//密码
define('DB_NAME','Test');

$connect = mysql_connect(
   DB_HOST, 
   DB_USER, 
   DB_PWD
)or die('数据库连接失败:'.mysql_error());

mysql_select_db(DB_NAME,$connect) or die('数据库连接错误,错误信息:'.mysql_error());

//从数据库里把表的数据提出来(获取记录集)

$query = "SELECT * FROM gc_DataBase";
$result = mysql_query($query) or die('SQL错误,错误信息:'.mysql_error());

class User {
    public $id ;
    public $name ;
    public $address;
    public $phonenumber;
}
$data =array();
while ($row= mysql_fetch_array($result, MYSQL_ASSOC)){
    $user = new User();
    $user -> id = $row["id"];
    $user -> name = $row["name"];
    $user -> address = $row["address"];
    $user -> phonenumber = $row["phonenumber"];
    $data[] = $user;
}

if (function_exists('mysql_set_charset') === false) {
    mysql_query("SET NAMES UTF8",$data);
}else{
    mysql_set_charset('utf8',$data);
}

$response = array(
    'code'    => 200, 
    'message' => 'success for request',
    'data'    => $data,
);

echo urldecode(json_encode($response));

mysql_free_result($response);  //释放

mysql_close();//关闭数据库
?>

最后在浏览器显示的是这个尿性

{
    "code": 200, 
    "message": "success for request", 
    "data": [
        {
            "id": "100", 
            "name": "??", 
            "address": "????", 
            "phonenumber": "13212340001"
        }, 
        {
            "id": "101", 
            "name": "??", 
            "address": "????", 
            "phonenumber": "13512340002"
        }, 
        {
            "id": "100", 
            "name": "??", 
            "address": "????", 
            "phonenumber": "13212340001"
        }, 
        {
            "id": "101", 
            "name": "??", 
            "address": "????", 
            "phonenumber": "13512340002"
        }, 
        {
            "id": "0", 
            "name": "", 
            "address": "", 
            "phonenumber": "0"
        }, 
        {
            "id": "103", 
            "name": "??", 
            "address": "????", 
            "phonenumber": "13512340005"
        }, 
        {
            "id": "103", 
            "name": "??", 
            "address": "????", 
            "phonenumber": "13512340005"
        }
    ]
}

为什么中文显示的是问号呢?我要的Unicode编码的就好了

解决方案

if (function_exists('mysql_set_charset') === false) {
    mysql_query("SET NAMES UTF8",$data);
}else{
    mysql_set_charset('utf8',$data);
}

这一段应该放在mysql_query之前,另外这两个地方的第二个参数也不应该是$data,而应该是$connect

这篇关于编码 - 我用PHP从mysql取出数据然后转Json,但是为什么中文显示的是问号?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆