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