中文 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 );

猜你喜欢

转载自www.cnblogs.com/xinxinmifan/p/11672158.html
今日推荐