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));

猜你喜欢

转载自blog.csdn.net/u011415782/article/details/119038679