zeromax 发表于 2018-12-16 15:09:10

PHP的json_encode中文被转码的问题

  在php5.2中做json_encode的时候。中文会被unicode编码,
  php5.3加入了options参数,
  5.4以后才加入JSON_UNESCAPED_UNICODE,这个参数,不需要做escape和unicode处理。
  所以在5.4之前都需要对中文做个处理
  5.4里面的处理
  Php代码http://scnjl.iteye.com/images/icon_star.png

[*]  json_encode($str, JSON_UNESCAPED_UNICODE);
  5.4之前,有两种方法处理
  方法1.
  Php代码http://scnjl.iteye.com/images/icon_star.png

[*]  function encode_json($str){
[*]  $code = json_encode($str);
[*]  return preg_replace("#\\\u(+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", $code);
[*]  }
  方法1.在实际应用中有个问题,部分字符会掉,不止为何,如字符串:"日期11.2"会被变成"日期.2"
  方法2.
  先对需要处理的做urlencode处理,然后json_encode,最后做urldecode处理
  Php代码http://scnjl.iteye.com/images/icon_star.png

[*]  function encode_json($str) {
[*]  return urldecode(json_encode(url_encode($str)));
[*]  }
[*]
[*]  /**
[*]  *
[*]  */
[*]  function url_encode($str) {
[*]  if(is_array($str)) {
[*]  foreach($str as $key=>$value) {
[*]  $str = url_encode($value);
[*]  }
[*]  } else {
[*]  $str = urlencode($str);
[*]  }
[*]
[*]  return $str;
[*]  }

页: [1]
查看完整版本: PHP的json_encode中文被转码的问题