var_dump(json_encode($ data))返回bool(false)

时间:2016-08-03 15:55:16

标签: php json

从Sql查询获得结果后,我将结果存储在 $ data 数组中, var_dump($ data)之后看起来像这样:

array(100) {
  [0]=>
  object(stdClass)#3 (3) {
    ["qid"]=>
    string(2) "19"
    ["q_no_on_paper"]=>
    string(1) "0"
    ["question_text"]=>
    string(139) "  Consider the following          statements-                                                    1- The Centre recently unveiled the expanded version of the. . ."
  }
  [1]=>
  object(stdClass)#4 (3) {
    ["qid"]=>
    string(2) "16"
    ["q_no_on_paper"]=>
    string(1) "0"
    ["question_text"]=>
    string(138) ". There is dispute over the Tipaimukh hydraulic project between India          and                         A. Bhutan                       B. Nepal                        C.. . ."
  }  ...

阵列很长,所以这只是它的一部分 现在当我json_encode($data);,然后 var_dump 时,我得到bool(false)
我按照DataTables download builder中的示例#1后尝试使用json_last_error(),它显示- No errors

我哪里错了?为什么不编码呢?

修改
["question_text"]包含一些 html 文字。

2 个答案:

答案 0 :(得分:0)

这可以帮助您

虽然版本日志中没有记录这一点,但non-UTF8中的5.5处理行为已发生变化,这种方式可能会使调试变得困难。

将非UTF-8字符串传递给json_encode()会使函数return false PHP 5.5 中,而它只会使此字符串无效(只有这一字符串) )以前的版本。

Latin-1 encoded file中,请写下:

<?php
$a = array('é', 1);
var_dump(json_encode($a));
?>

PHP < 5.4:
string(8) "[null,1]"

PHP >= 5.5:
bool(false)

PHP 5.5当然是正确的(如果编码失败,则返回false)但是在更新到5.5时它可能会引入错误,因为以前你可以获得JSON的其余部分,即使一个字符串是不在UTF8(如果没有使用这个字符串,你永远不会通知它已经无效)

因此,您可能会遇到 PHP&gt; = 5.5

的后续示例

请参阅 php.net 文档http://php.net/manual/en/function.json-encode.php#115733

答案 1 :(得分:-1)

我在var_dump($ data)结果中看到一些空格/ HTML字符(如\ n,\ t,\ t \ r)。这使得JSON无效,因此json_encode返回false。检查数组中的以下索引......

["question_text"]=> string(139) "&nbsp; Consider the          following statements-