【问题标题】:PHP - json_decode from mysqlPHP - 来自 mysql 的 json_decode
【发布时间】:2014-05-10 23:30:48
【问题描述】:

我有一个 Android 应用程序、PHP 页面和 MySql 数据库。
android 应用程序向服务器发送一个字符串参数,我使用 Gson,所以我知道 Json 字符串是正确的。
在服务器端,我将该 json 字符串存储为 Text 字段。
在 Web 客户端上,我从数据库中获取该字段并执行 json_decode 并收到NULL
大部分网站都是PHPMAKER 10写的,所以我用它的数据库连接。

$result="";
$rs->MoveFirst();
if ($rs) {
    $result = $rs->fields[0];
}
$rs->Close();
$extras = json_decode($result, true);

我检查了 Json validator 中的那个 json,它看起来不错。

任何想法为什么我会得到空值? (可能是编码)

编辑: 我做了以下检查:

echo "<script> var x = {$result}; console.log(x.length)</script>";

Chrome 出现以下错误:

Uncaught SyntaxError: Unexpected token ILLEGAL 

编辑 2: 如果我打印该字符串 echo $result 并将其复制到一个变量中,它就可以工作。

【问题讨论】:

  • var_export($result) 的结果是什么?
  • 一个字符串,我用var_dump检查过。
  • json_last_error_msg 函数会给你错误信息。
  • 错误只是数字 4 (JSON_ERROR_SYNTAX),但我已经检查了 json。
  • JSON 字符串是否太长而无法手动检查?开始删除位,或从向{} 添加位开始,看看解析器不喜欢哪个部分。

标签: php android mysql json


【解决方案1】:

这发生在我身上,当时 JSON 字符串的开头有一个 UTF-8 BOM。 JSON默认是UTF-8,所以BOM好像是被禁止的。

您可以使用此功能将其删除:

//Remove UTF8 Bom

function remove_utf8_bom($text)
{
    $bom = pack('H*','EFBBBF');
    $text = preg_replace("/^$bom/", '', $text);
    return $text;
}

取自这里:How to remove multiple UTF-8 BOM sequences before "<!DOCTYPE>"?

【讨论】:

    【解决方案2】:

    我解决了这个问题:
    我的 json 包含断线'/r' and '/r/n'.
    删除它们后一切都很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-12
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多