开发者社区> 问答> 正文

php json_encode() 输出问题

Apr 2 11:23:50 Web2 php-fpm[22294]: [WARNING] [pool www] child 25982 said into stderr: "NOTICE: PHP message: PHP Warning: json_encode(): Invalid UTF-8 sequence in argument in 

请问这个问题该怎么解决?

展开
收起
小旋风柴进 2016-03-10 11:14:15 2931 0
1 条回答
写回答
取消 提交回答
  • 参考:
    在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。
    这个函数的功能是将数值转换成json数据存储格式。

    <?php
    
    $arr = array
    
           (
      'Name'=>'你妹',
      'Age'=>22
    
           );
    $jsonencode = json_encode($arr);
    echo $jsonencode;
    ?>

    程序运行结果如下:

    {"Name":null,"Age":20}
    json_encode 函数中中文被编码成 null 了,Google 了一下,很简单,为了与前端紧密结合,Json 只支持 utf-8 编码,我认为是前端的 JavaScript 也是 utf-8 的原因。

    <?php
    $array = array
    
        (
       'name'=>iconv('GB18030','utf-8','你妹'),
    'sex'=>'men'
      );
    echo json_encode($array);
    ?>

    这个程序的运行结果为:

    {"title":"\u6d63\u72b2\ue785","body":"men"}
    iconv 转换格式时用GBK,gb2312 报错问题,是因为GB2312只收录6763个汉字,出现未收录的汉字时,iconv报错。 GBK向下完全兼容GB2312-80,支持更多的字,但仍然会出现错误,解决办法是用GB18030,GB18030基本兼容GBK,又扩充了百余字体。
    数组中所有中文在json_encode之后都不见了或者出现u6d63等。
    解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。

    <?php
    
    /**************************************************************
    
     *
    
     *  使用特定function对数组中所有元素做处理
    
     *  @param  string  &$array     要处理的字符串
    
     *  @param  string  $function   要执行的函数
    
     *  @return boolean $apply_to_keys_also     是否也应用到key上
    
     *  @access public
    
     *
    
     *************************************************************/
    
    function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
    
    {
    
        static $recursive_counter = 0;
    
        if (++$recursive_counter > 1000) {
    
            die('possible deep recursion attack');
    
        }
    
        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]);
    
                }
    
            }
    
        }
    
        $recursive_counter--;
    
    }
    
      
    
    /**************************************************************
    
    
     *  将数组转换为JSON字符串(兼容中文)
    
     *  @param  array   $array      要转换的数组
    
     *  @return string      转换得到的json字符串
    
     *  @access public
    
     *
    
     *************************************************************/
    
    function JSON($array) {
    
        arrayRecursive($array, 'urlencode', true);
        $json = json_encode($array);
    
        return urldecode($json);
    
    }
    
    $array = array
    
           (
    
              'Name'=>'你妹',
    
              'Age'=>22
    
           );
    
    echo JSON($array);
    
    ?>

    运行结果如下:

    {"Name":"你妹","Age":"22"}

    2019-07-17 18:57:14
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-深入浅出网络编程与swoole内核-吴镇宇 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载