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

相关文章
相关标签/搜索