使用json_encode编码中文返回null的解决方案

一、在gbk的程序中,直接使用json_encode编码包含中文字符的数组,将会返回null。

解决方法是用iconv转换后再用encode编码。

代码如下:

function gbk_to_utf8($data) {
        if( is_array($data) ) {
            foreach ($data as $k => $v) {
                if ( is_array($v) ) {
                    $data[$k] = gbk_to_utf8($v);
                } else {
                    $data[$k] = iconv('gbk', 'utf-8', $v);
                }
            }
            return $data;
        } else {
            $data = iconv('gbk', 'utf-8', $data);
            return $data;
        }
}


使用方法:

$data = '中文';
echo json_encode(gbk_to_utf8($data));

二、将UNICODE编码成UTF-8字符串

 // 将UNICODE编码后的内容进行解码,编码后的内容格式:\u56fe\u7247 (原始:图片)  
    function unicode_decode($name) {  
        // 转换编码,将Unicode编码转换成可以浏览的utf-8编码  
        $pattern = '/([\w]+)|(\\\u([\w]{4}))/i';  
        preg_match_all($pattern, $name, $matches);  
        if (!empty($matches))  
        {  
            $name = '';  
            for ($j = 0; $j < count($matches[0]); $j++)  
            {  
                $str = $matches[0][$j];  
                if (strpos($str, '\\u') === 0)  
                {  
                    $code = base_convert(substr($str, 2, 2), 16, 10);  
                    $code2 = base_convert(substr($str, 4), 16, 10);  
                    $c = chr($code).chr($code2);  
                    $c = iconv('UCS-2', 'UTF-8', $c);
                    $name .= $c;  
                }  
                else  
                {  
                    $name .= $str;  
                }  
            }  
        }  
        return $name;  
    } 

使用方法:

$data = "\u7a33\u6b65\u524d\u8fdb";
echo unicode_decode($data);


你可能感兴趣的:(php)