編碼 - 我用PHP從mysql取出資料然後轉Json,但是為什麼中文顯示的是問號?

來源:互聯網
上載者:User


上面的是我資料庫存的資料,採用的utf8_bin編碼,開始的時候用的是utf8_unicode_ci,可是還是不行
下面是我的PHP代碼

 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編碼的就好了

回複內容:


上面的是我資料庫存的資料,採用的utf8_bin編碼,開始的時候用的是utf8_unicode_ci,可是還是不行
下面是我的PHP代碼

 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

我之前也遇到過這個問題,加了個這個後就好了mysqli_query($conn,"SET NAMES utf8");

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);            }}

中文的urlencode 這個編碼問題,我遇到的,不能直接進行解碼。不然會出現亂碼的。我使用的方式是。
單獨編碼。然後在解碼,` /**

 * [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)));

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

這一句應該放在遍曆資料之前吧

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.