为什么json_encode会返回空?

时间:2015-07-31 11:41:41

标签: php json ajax is-empty jsonresult

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

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

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

如果我尝试print_r($result)并在浏览器Developer tools中观看它们,我会看到带有normall数据的正确数组。但如果我用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' => array('banan', 'apple', 'mango', 'редиска')));

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

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

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

3 个答案:

答案 0 :(得分:3)

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

此错误消息可能有助于确定编码出错的地方。

修改

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

Here

答案 1 :(得分:2)

尝试这个,它一定会有效

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 ) );

答案 2 :(得分:0)

尝试

json_encode($result, JSON_UNESCAPED_UNICODE);

检查json_encode

的第二个参数