Home >Backend Development >PHP Tutorial >Encoding - I use PHP to extract data from mysql and then convert it to Json, but why is a question mark displayed in Chinese?

Encoding - I use PHP to extract data from mysql and then convert it to Json, but why is a question mark displayed in Chinese?

WBOY
WBOYOriginal
2016-09-14 09:41:271291browse

Encoding - I use PHP to extract data from mysql and then convert it to Json, but why is a question mark displayed in Chinese?
Encoding - I use PHP to extract data from mysql and then convert it to Json, but why is a question mark displayed in Chinese?

The above is the data in my data inventory, using utf8_bin encoding. At the beginning, I used utf8_unicode_ci, but it still didn’t work.
The following is my PHP code

<code><?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>

The last thing displayed in the browser is this urine

<code>{
    "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"
        }
    ]
}
</code>

Why is the question mark displayed in Chinese? I just want the Unicode encoding

Reply content:

Encoding - I use PHP to extract data from mysql and then convert it to Json, but why is a question mark displayed in Chinese?
Encoding - I use PHP to extract data from mysql and then convert it to Json, but why is a question mark displayed in Chinese?

The above is the data in my data inventory, using utf8_bin encoding. At the beginning, I used utf8_unicode_ci, but it still didn’t work.
The following is my PHP code

<code><?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>

The last thing displayed in the browser is this urine

<code>{
    "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"
        }
    ]
}
</code>

Why is the question mark displayed in Chinese? I just want the Unicode encoding

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

This paragraph should be placed before mysql_query. In addition, the second parameter in these two places should not be $data, but should be $connect

I have encountered this problem before, and it was fine after adding this mysqli_query($conn,"SET NAMES utf8");

<code>class DBHelper{
    
    public function DBHelper(){}
    
    private static function getConn(){
        $conn = mysqli_connect(DB_HOST,DB_USER,DB_PWD,DB_NAME);
        mysqli_query($conn,"SET NAMES utf8");
        return $conn;
    }
    
    public static function opearting($sql){
        return mysqli_query(self::getConn(),$sql);
        
    }
}</code>

Chinese urlencode This encoding problem I encountered cannot be decoded directly. Otherwise, garbled characters will appear. The way I use it is.
Individually encoded. Then decoding, ` /**

<code> * [ReturnUrlencode 用递归的方式来遍历所有的数组并且解析]
 * @param [type] $arr [description]
 */
function ReturnUrlencode($arr){
    foreach ($arr as $key => $value){
        if(is_array($value)){   
            $arr[$key]=ReturnUrlencode($value);
        }else{
            $arr[$key]=urlencode($value);
        }
    }
    return $arr;
}`

##这种方式,输出来的json 中文就不会乱码了。
urldecode(json_encode(ReturnUrlencode($arr)));</code>

<code class="php">if (function_exists('mysql_set_charset') === false) {
    mysql_query("SET NAMES UTF8",$data);
}else{
    mysql_set_charset('utf8',$data);
}</code>

This sentence should be placed before traversing the data

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn