PHP 中 json_encode 处理数组的返回信息为 NULL 时的处理

  • 背景

    今天在处理消息队列逻辑时,因为连接不上服务器,返回的错误信息中存在中文乱码
    以前的处理方式,就是对返回的信息,使用 json_encode() 编码处理,记录到 错误日志中,方便后期问题排查
    但是,此时发现,json_encode() 返回的是 false|NULL ,无法满足我的需求

    通过网上的建议,找到一种解决方案 :【PHP json_decode/json_encode 中文内容为NULL或乱码】

  • 源码

/**************************************************************
 *
 *    处理因为数组元素中含有中文乱码时的问题
 *    @param    string    &$array        要处理的字符串
 *    @param    string    $function    要执行的函数
 *    @return boolean    $apply_to_keys_also        是否也应用到key上
 *    @access public
 *
 *************************************************************/
function arrayRecursive(&$array, $function = 'urlencode', $apply_to_keys_also = true)
{
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            arrayRecursive($array[$key], $function, $apply_to_keys_also);
        } else {
            $array[$key] = $function($value);
        }
        if ($apply_to_keys_also && is_string($key)) {
            $new_key = $function($key);
            if ($new_key != $key) {
                $array[$new_key] = $array[$key];
                unset($array[$key]);
            }
        }
    }
}

/**
 * 处理因为数组元素中含有中文乱码问题时,json_encode优化方法
 * @param $array
 * @return string
 */
function json_encode_mz_urlencode($array){
    arrayRecursive($array);
    $json = json_encode($array);
    return urldecode($json);
}
  • 以我在 ThinkPHP5 框架下的处理方式,调用如下:
 Log::error('导出任务队列添加失败:'.json_encode_mz_urlencode($error));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值