中文 json_encode以後字符長度問題

問題描述:

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

問題緣由:

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

如何解決:

  • 方法一: 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)sql

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

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

    $test= mysql_escape_string( $str );編碼

相關文章
相關標籤/搜索