JSON

PHP实现json_encode函数不转义中文的多种方法

字号+ 作者:H5之家 来源:H5之家 2017-09-02 16:03 我要评论( )

如果你调用 PHP 自带的 json_encode() 函数, 碰到中文时, 中文会被转义掉。可是有些时候,希望中文不被转义,那怎么实现呢?

如果你调用 PHP 自带的 json_encode() 函数, 碰到中文时, 中文会被转义掉。

$arr = array( 'name' => 'webyang.net IT技术博客', 'url' => 'www.webyang.net', ); 运行echo json_encode($arr);结果输出:{"name":"webyang.net IT\u6280\u672f\u535a\u5ba2","url":"www.webyang.net"}

如何禁用掉这种转义呢?

PHP5.4+版本(多加 JSON_UNESCAPED_UNICODE 参数即可):
json_encode($json, JSON_UNESCAPED_UNICODE); 同样上面的数组,结果输出:{"name":"webyang.net IT技术博客","url":"www.webyang.net"}

PHP5.3版本及以下:
方法一: $arr['name'] = urlencode($arr['name']); echo urldecode(json_encode($arr)); 同样上面的数组,结果输出:{"name":"webyang.net IT技术博客","url":"www.webyang.net"}
但这种做法,如果中文key值很多的时候,写起来会代码比较臃肿。

方法二: function my_json_encode($arr) { //convmap since 0x80 char codes so it takes all multibyte codes (above ASCII 127). So such characters are being "hidden" from normal json_encoding array_walk_recursive($arr, function (&$item, $key) { if (is_string($item)) $item = mb_encode_numericentity($item, array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); }); return mb_decode_numericentity(json_encode($arr), array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); } 调用echo my_json_encode($arr); 结果输出:{"name":"webyang.net IT技术博客","url":"www.webyang.net"}。

方法三: function json_encode_new($input) { // 从 PHP 5.4.0 起, 增加了这个选项. if(defined('JSON_UNESCAPED_UNICODE')) { return json_encode($input, JSON_UNESCAPED_UNICODE); } if(is_string($input)) { $text = $input; $text = str_replace('\\', '\\\\', $text); $text = str_replace( array("\r", "\n", "\t", "\""), array('\r', '\n', '\t', '\\"'), $text); return '"' . $text . '"'; } else if(is_array($input) || is_object($input)) { $arr = array(); $is_obj = is_object($input) || (array_keys($input) !== range(0, count($input) - 1)); foreach($input as $k=>$v) { if($is_obj) { $arr[] = json_encode_new($k) . ':' . json_encode_new($v); } else { $arr[] = json_encode_new($v); } } if($is_obj) { return '{' . join(',', $arr) . '}'; } else { return '[' . join(',', $arr) . ']'; } } else { return $input . ''; } } 调用echo json_encode_new($arr); 结果输出:{"name":"webyang.net IT技术博客","url":"www.webyang.net"}。
网上大部分都是这种做法,而且一搜一大把。想起农夫山泉的广告:我们不生产水,我们只是大自然的搬运工。

不过这年头,基本都是php5.4以上。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • C#对象转Json序列化

    C#对象转Json序列化

    2017-09-02 12:00

  • Newtonsoft.Json(Json.net)的基本用法 JsonConvert.SerializeO

    Newtonsoft.Json(Json.net)的基本用法 JsonConvert.SerializeO

    2017-09-01 09:03

  • php变量与JS变量实现不通过跳转直接交互的方法

    php变量与JS变量实现不通过跳转直接交互的方法

    2017-08-28 16:00

  • Excel VBA如何读取json中的源数据到窗体,方便查找?

    Excel VBA如何读取json中的源数据到窗体,方便查找?

    2017-08-28 08:02

网友点评