中文 json_encode之后字符長度問題


問題描述:

將某個字符串$str 進行json編碼,即json_encode($str)后變成Unicode字符存入數據庫,會發現中文的長度明明沒有超過設置的字符長度最大值,但是卻拋出字段長度過長錯誤;
查看數據庫發現該字段的漢字字符被轉義成一些特殊的數字字母串(非unicode字符)

問題原因:

MySQL 僅支持從基本的多語種平面字符 (0×0000-0xFFFF)。請嘗試存儲一個同義詞相反:)
MySQL 5.5.3 以上 (其中尚未 GA), 支持補充字符如果您使用 UTF8MB4 編碼。
json_encode中文的時候,會把每個中文字符encode成“\uxxxx”, 而存進數據庫的時候,“\”被屏蔽了,直接變成”uxxxx”

如何解決:

  • 方法一: php5.4版本可以json_encode($str,JSON_UNESCAPED_UNICODE)來避免中文漢字被轉化成unicode。但是如果漢字中存在"\t"字符串,取數據后json_decode(str)會轉化失敗;

  • 方法二: json_encode(urlencode($str)) 將漢字先進行urlencode();然后json_encode();
    取數據后urldecode();即:json_encode(urlencode($str)) 從數據庫取出來:urldecode($str)

  • 方法三: $str = json_encode($str);

    $test= addslashes( $str ); //或

    $test= mysql_escape_string( $str );


免責聲明!

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



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