zoukankan      html  css  js  c++  java
  • php使用json_encode中遇见问题?

    注:php版本5.4下,不支持json_encode对中文的处理,要么升级php版本。

     

    json_encode($value,$options)

    其中有2个比较常用到的参数:

    1.JSON_UNESCAPED_UNICODE(中文不转为unicode ,对应的数字 256

    2.JSON_UNESCAPED_SLASHES(不转义反斜杠,对应的数字 64

    A.数组中存在哪些字符会导致数组json_encode返回false

    总结;

    1.json_encode 所有字符串数据的编码必须是 UTF-8,不然返回false;

    2.如果不是utf-8 可以utf8_encode()处理下;待处理json最大深度默认512,可以 覆盖它$json = json_encode($arr, 0, 1024);可以使用json_last_error_msg查看具体返回false原因

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

    解决方法是用iconv转换UTF-8后再用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));
    

    C.若数组中的数据为UNICODE编码,需将UNICODE编码成UTF-8字符串,不然将会返回null。

     1  // 将UNICODE编码后的内容进行解码,编码后的内容格式:u56feu7247 (原始:图片)  
     2     function unicode_decode($name) {  
     3         // 转换编码,将Unicode编码转换成可以浏览的utf-8编码  
     4         $pattern = '/([w]+)|(\u([w]{4}))/i';  
     5         preg_match_all($pattern, $name, $matches);  
     6         if (!empty($matches))  
     7         {  
     8             $name = '';  
     9             for ($j = 0; $j < count($matches[0]); $j++)  
    10             {  
    11                 $str = $matches[0][$j];  
    12                 if (strpos($str, '\u') === 0)  
    13                 {  
    14                     $code = base_convert(substr($str, 2, 2), 16, 10);  
    15                     $code2 = base_convert(substr($str, 4), 16, 10);  
    16                     $c = chr($code).chr($code2);  
    17                     $c = iconv('UCS-2', 'UTF-8', $c);
    18                     $name .= $c;  
    19                 }  
    20                 else  
    21                 {  
    22                     $name .= $str;  
    23                 }  
    24             }  
    25         }  
    26         return $name;  
    27     } 

    使用方法:

    $data = "u7a33u6b65u524du8fdb";
    echo unicode_decode($data);
    

    D.json_encode的第二个参数,默认false

    当第二个参数默认false,为 TRUE 时,将返回数组,FALSE 时返回对象

     

  • 相关阅读:
    数学系列:数学在计算机图形学中的应用
    数学系列:数学体系概览
    Math: Fibonacci
    算法系列:电磁频谱划分
    计算机系列:CUDA 深入研究
    算法系列:寻找最大的 K 个数
    算法系列:000
    算法系列:三元组和
    算法系列:单链表逆序
    堆栈区别
  • 原文地址:https://www.cnblogs.com/feixiablog/p/9406885.html
Copyright © 2011-2022 走看看