1.原因分析:
在存儲到數據庫時,MySQL不會存儲Unicode字符,MySQL僅支持基本的多語種平面字符(0x0000-0xFFFF)。
MySQL5.5.3上,支持補充字符如果你使用utf8mb4編碼。
json_encode中文的時候,會把每個中文字符encode成“\uxxxx”,而存進數據庫的時候,“\”被屏蔽了,直接變成“uxxxx”。
2.解決問題:
選擇其他存儲方式或者進一步轉譯“\”為“\\”,以保留“\”.
3.解決辦法:
1.避免json_encode將中文換成unicode 編碼,php5.4版本已經給JSON新增了一個選項:JSON_UNESCAPED_UNICODE。加上這個選項后,就不會自動把中文編碼了:
$test = json_encode("深圳",JSON_UNESCAPED_UNICODE);
2.先將中文字段urlencode,json_encode后,再用urldecode,也可以保證中文不會被轉Unicode:
$test = urldecode(json_encode([urlencode('簡介')]));
3.進一步轉義“\” 為 “\\” 避免Unicode中文前“\” 被MySQL當成特殊字符去除:
$test=addslashes(json_encode('中文'));