-
背景
今天在处理消息队列逻辑时,因为连接不上服务器,返回的错误信息中存在中文乱码
以前的处理方式,就是对返回的信息,使用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));