zoukankan      html  css  js  c++  java
  • 中文 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。但是如果汉字中存在" "字符串,取数据后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 );

  • 相关阅读:
    POJ
    POJ
    HDU
    HDU
    HDU
    POJ
    HDU
    POJ
    A-meeting 2019牛客暑期多校第四场 (树的直径)
    算法与数据结构实验题 2.1 塔防
  • 原文地址:https://www.cnblogs.com/xinxinmifan/p/11672158.html
Copyright © 2011-2022 走看看