Echo json_encode无法处理某些实例

时间:2015-10-14 22:55:04

标签: php json

我目前正在使用php来回应我的网页的json响应,并且在某些情况下遇到了麻烦。我无法弄清楚是什么导致了这一点。我使用的sql语句如下所示:

"SELECT * 
        FROM table
        WHERE id = $id
        LIMIT 20 OFFSET $offset"

当用户切换页面时,唯一改变的是$offset。我有8页数据,第7页和第8页都没有返回数据,而其他所有数据都没有。当我将此sql语句复制到我的数据库中进行测试时,它会正确检索数据。

这是我如何回应json:

while ($row = mysqli_fetch_array($fetch, MYSQLI_ASSOC)) {
    $row_array['id'] = $row['id'];
    $row_array['title'] = $row['title'];
    $row_array['description'] = $row['description'];
    array_push($return_arr,$row_array); 
    //echo json_encode($return_arr);  <-- this returns JSON
}

echo json_encode($return_arr);

在第7页和第8页以外的所有页面上,它返回正确的JSON,但由于某种原因,这两个页面上的回声什么也没做。如果我将json放在我注释掉的循环中,它将为第7页和第8页返回正确的json,这是奇怪的。我在验证器中检查了json,它是有效的json。有没有办法检查错误或调试此错误?

1 个答案:

答案 0 :(得分:13)

是的,有。我认为可能发生的是你的一些行包含非utf8编码的字符。如果发生这种情况,json_encode会失败,只会返回false。您可以使用is_bool进行检查。

http://php.net/manual/en/function.json-encode.php

value
The value being encoded. Can be any type except a resource.

All string data must be UTF-8 encoded.

解决此问题的一个天真的解决方案是执行mysqli_set_charset($dbc, 'utf8');,虽然问题更深入,但您应该考虑正确转换所有字符以避免丢失字节。