【问题标题】:Why does json_encode return empty?为什么 json_encode 返回空?
【发布时间】:2015-10-23 01:59:41
【问题描述】:

我的脚本有问题,该脚本通过 AJAX 从数据库请求记录,然后通过 JSON 将其返回。它在我的本地主机上正常工作,但是当我将其上传到服务器时它不起作用。

我阅读了关于空json_encode()结果的主题,发现类似的问题对很多人来说都是如此,并且有数据编码的解决方案。但我所有的文件、表格和数据通常在本地和远程服务器上都采用 UTF-8 编码。

我的 PHP 脚本所做的一切都是从数据库请求记录(我使用 PDO 库,并将数据库编码设置为 UTF-8 - SET NAMES 'utf8')然后抛出循环,它使用数据库中的数据生成 HTML 标记,然后返回为带有json_encode($result) 的数组。

如果我尝试print_r($result) 并在浏览器Developer tools 中观看它们,我将看到带有正常数据的正确数组。但如果我用json_encode($result) 退回它们,结果将一无所有。

我的结果数组中还有俄语文本。

结果数组示例:

[data] => Array
    (
        [0] => Array
            (
                [0] => <input type="checkbox" name="id[]" value="1">
                [1] => 1
                [2] => Английский стол
                [3] => <span title='Вращающийся английский стол с выдвижными ящиками.Англия, 1900-е гг.Красное дерево, мягкая кожа диска, передвигается на бронзовых колесиках.Диаметр 91, высота 71 см.'>Вращающийся английский стол с выдвижными ящиками.<br>Англия, 1900-е гг.<br>Красное дерево, мягкая кожа диска, перед...</span>
                [4] => 250&euro;
                [5] => sss
                [6] => 
                [7] => <span class="label label-sm label-success">Опубликован</span>
                [8] => <a href="/jc_adm/?p=edit_product&id=1" class="btn btn-xs default btn-editable"><i class="fa fa-pencil"></i> Редактировать</a>
            )

        [1] => Array
            (
                [0] => <input type="checkbox" name="id[]" value="2">
                [1] => 2
                [2] => Старинный раскладной стол
                [3] => <span title='Оригинальный стол 1800 г. вторая половина.Изогнутые ножки, резная опора, натуральное дерево.Высота 125 Ширина 56 Высота 78 см.'>Оригинальный стол 1800 г. вторая половина.<br>Изогнутые ножки, резная опора, натуральное дерево.<br>Высота 125 Ширин...</span>
                [4] => 210&euro;
                [5] => sss
                [6] => 
                [7] => <span class="label label-sm label-success">Опубликован</span>
                [8] => <a href="/jc_adm/?p=edit_product&id=2" class="btn btn-xs default btn-editable"><i class="fa fa-pencil"></i> Редактировать</a>
            )

        [2] => Array......

但是如果我手动创建数组,例如下一个信息 echo json_encode(array('fruits' =&gt; array('banan', 'apple', 'mango', 'редиска')));.

它将正常工作,并正常显示 JSON 编码的字符串。但是我的示例中的数组不想返回。为什么会这样?

我发现如果我删除设置数据库编码$objDB-&gt;query("SET NAMES utf8");,我会得到结果,但我得到的不是俄语文本,而是问号?????

{"data":[["<input type=\"checkbox\" name=\"id[]\" value=\"1\">",1,"?????????? ????","<span title='??????????? ?????????? ???? ? ?????????? ???????.??????, 1900-? ??.??????? ??????...

【问题讨论】:

    标签: php json ajax is-empty jsonresult


    【解决方案1】:

    试试

    json_encode($result, JSON_UNESCAPED_UNICODE);
    

    检查json_encode的第二个参数

    【讨论】:

    • 你好,吉加尔!是的,我试图这样做,但结果是一样的。 :(
    【解决方案2】:

    您的 json_encode 似乎失败了,如果您在 PHP 配置中启用它,您就会收到通知。还有其他方法可以确定您的 json_encode 是否失败,尝试获取 json_last_error 的值

    此错误消息可能有助于确定编码出了什么问题。

    编辑

    这样的问题已经得到解答:

    Here

    【讨论】:

    • 你好,阿伦!它返回给我int 5,并且在 localhost 上返回相同。但在 localhost 上,它与远程服务器相反。 :(
    【解决方案3】:

    试试这个,肯定有用

    function utf8ize($d) {
      if (is_array($d)) {
         foreach ($d as $k => $v) {
           $d[$k] = utf8ize($v);
         }
      } else if (is_string ($d)) {
         return utf8_encode($d);
      }
       return $d;
    }
    

    然后调用

    echo json_encode( utf8ize( $array ) );
    

    【讨论】:

    • 是的,这很好用,但是我们需要硬编码这个函数的原因是模糊的。 PHP 开发者应该在命令的参数中嵌入这个选项!
    猜你喜欢
    • 2016-04-30
    • 2013-10-22
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 2016-02-24
    • 2015-11-16
    • 1970-01-01
    • 2017-01-17
    相关资源
    最近更新 更多