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