• PHP开发笔记(二)PHP的json_encode和json_decode问题


    解决PHP的json_encode问题之前,先了解一下PHP预定义常量http://php.net/manual/zh/json.constants.php。

    用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似”\u***”的格式,如果想汉字不进行转码,可以升级PHP,在PHP5.4, 这个问题终于得以解决, Json新增了一个选项: JSON_UNESCAPED_UNICODE, 故名思议, 就是说, Json不要编码Unicode。

    JSON_UNESCAPED_UNICODE //中文不转为unicode

    JSON_UNESCAPED_SLASHES //不转义反斜杠

    <?php echo json_encode("中文", JSON_UNESCAPED_UNICODE);

    还有一种写法,就是下面使用整数来代替。

    JSON_UNESCAPED_UNICODE 和 JSON_UNESCAPED_SLASHES 都是常量

    JSON_UNESCAPED_UNICODE = 256

    JSON_UNESCAPED_SLASHES = 64

    JSON_UNESCAPED_UNICODE + JSON_UNESCAPED_SLASHES = 320

    <?php $arr = array('test'=>'测试中文和/同时生效');
    
    json_encode($arr,320);

    如果使用两个变量,需要中间使用|,因为在PHP内部都是用1 << N这种方式定义的常量。如下所示:

    json_encode($arr,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);

    【下面三点是转载的内容-_-】

    1.把汉字先urlencode然后再使用json_encode,json_encode之后再次使用urldecode来解码,这样编码出来的json数组中的汉字就不会出现unicode编码了。

    $array = array( 'test'=>urlencode("我是测试") ); $array = json_encode($array); echo urldecode($array); //{"test":"我是测试"}

    2.对unicode码再进行解码,解码函数如下: function decodeUnicode($str) {     return preg_replace_callback('/\\\\u([0-9a-f]{4})/i',         create_function(             '$matches',             'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");'         ),         $str); }

    3.例子

    $arr = array('name1':"中文",'name2':'abc12'); 
    
    $jsonstr = decodeUnicode(json_encode($arr));

    json_decode相关问题总结

    php在调用json_decode从字符串对象生成json对象时,如果使用[]操作符取数据,会得到下面的错误: 代码如下:

    Cannot use object of type stdClass as array

    产生原因,代码如下:

    $res = json_decode($res); 
    
    $res['key']; //把 json_decode() 后的对象当作数组使用 。 

    常见的解决方法有2种:

    1、使用 json_decode($d, true)。就是使json_decode 的第二个变量设置为 true。

    2、json_decode($res) 返回的是一个对象, 不可以使用 $res['key'] 进行访问, 换成 $res->key 就可以了。

    本人目前就职于河南伯驹网络科技有限公司,主要从事APP开发、小程序开发、网站定制开发,微信号:mxiaozhengcn
  • 相关阅读:
    'Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set.
    flask os.environ 的作用
    flask 中xx.init_app(app)方法
    win10安装ubuntu双系统遇到的问题
    福大软工 · 最终作业
    福大软工 · 第十二次作业
    Beta 冲刺(7/7)
    Beta 冲刺(6/7)
    常用正则
    使用elementUI动态增减表单项 且 使用自定义校验
  • 原文地址:https://www.cnblogs.com/zhengluwei/p/8029517.html
Copyright © 2020-2023  润新知