上面的是我資料庫存的數據,採用的utf8_bin編碼,開始的時候用的是utf8_unicode_ci,可是還是不行
下面是我的PHP代碼
<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>
最後在瀏覽器顯示的是這個尿性
<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>
為什麼中文顯示的是問號呢?我要的Unicode編碼的就好了
上面的是我資料庫存的數據,採用的utf8_bin編碼,開始的時候用的是utf8_unicode_ci,可是還是不行
下面是我的PHP代碼
<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>
最後在瀏覽器顯示的是這個尿性
<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>
為什麼中文顯示的是問號呢?我要的Unicode編碼的就好了
<code>if (function_exists('mysql_set_charset') === false) { mysql_query("SET NAMES UTF8",$data); }else{ mysql_set_charset('utf8',$data); }</code>
這一段應該放在mysql_query
之前,另外這兩個地方的第二個參數也不應該是$data
,而應該是$connect
我之前也遇到過這個問題,加了個這個後就好了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>
中文的urlencode 這個編碼問題,我遇到的,不能直接進行解碼。不然會出現亂碼的。我使用的方式是。
單獨編碼。然後在解碼,` /**
<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>
這一句應該放在遍歷資料之前吧