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


 

新建表Clubs

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  name

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

如果在phpMyAdmin中查看name字段內容就是?,修改MySQL 字符集選擇UTF8,MySQL 連接校對選擇utf8_general_ci

 

在mysql中查看字段內容為正確的中文字符后,通過mysql_query('select * from clubs')查詢

用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之前先執行

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的形式。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM