標籤:style blog color 使用 檔案 資料 for ar
建立表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的形式。