筆記:PHP查詢mysql數據後中文字符亂碼

 

新建表Clubsphp

CREATE TABLE `Clubs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) CHARACTER SET utf8 NOT NULL DEFAULT '',  
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

 

id  namehtml

1   程序員
2   架構師
3   產品經理
4   測試mysql

若是在phpMyAdmin中查看name字段內容就是?,修改MySQL 字符集選擇UTF8,MySQL 鏈接校對選擇utf8_general_ci程序員

 

在mysql中查看字段內容爲正確的中文字符後,經過mysql_query('select * from clubs')查詢sql

用var_dump打印查詢結果以下,全部的中文漢字都變成了?數據庫

array (size=4)
  0 => 
    array (size=2)
      'id' => string '1' (length=1)
      'name' => string '???' (length=3)
  1 => 
    array (size=2)
      'id' => string '2' (length=1)
      'name' => string '???' (length=3)
  2 => 
    array (size=2)
      'id' => string '3' (length=1)
      'name' => string '????' (length=4)
  3 => 
    array (size=2)
      'id' => string '4' (length=1)
      'name' => string '??' (length=2)

解決辦法:在執行mysql_query以前先執行json

mysql_query("set names utf8");

 

若是還不行,請確認php文件編碼格式是不是utf8格式,同時在php文件頭增長架構

header("Content-Type:text/html;charset=utf-8");

 

解決問題的根本辦法就是把相關的編碼格式都統一爲utf8。測試

 

查詢結果中文字符沒問題了,可是$clubs轉化爲json時,name字段中文字符卻又變了編碼

$clubs=json_encode($clubs);
echo($clubs);

輸出內容以下

[{"id":"1","name":"\u7a0b\u5e8f\u5458"},{"id":"2","name":"\u67b6\u6784\u5e08"},{"id":"3","name":"\u4ea7\u54c1\u7ecf\u7406"},{"id":"4","name":"\u6d4b\u8bd5"}]

解決方案:

foreach ( $clubs as $key => $value ) {             
                 
    foreach($value as $k=>$v){
                     
        $clubs[$key][$k] = urlencode($v);
    }              
                 
}             

$clubs=json_encode($clubs);
echo(urldecode($clubs));

緣由:

json_encode只支持UTF8編碼的字符,使用JSON做爲提交和接收的數據格式時,字符都採用UTF8編碼處理,當咱們的頁面編碼和數據庫編碼不是採用UTF8的時候,就極容易出現中文亂碼的問題。解決辦法是在用js或者PHP處理JSON數據的時候都採用UTF8的形式。

相關文章
相關標籤/搜索