【发布时间】:2018-06-20 23:27:29
【问题描述】:
我想将 json 字符串编码的数据发送到 PHP 后端。为此,我使用了GET 参数,其中包含 URL 编码的 json 数据,格式如下:["mystring1","mystring2"]
当我现在尝试使用 php 的 json_decode 函数对其进行解码时,它返回 null。此外,使用这个输入字符串,根本不会改变任何东西:{"mykey":["mystring1","mystring2"]}。
这是我的完整代码示例:
JavaScript:
var myArr = [];
myArr.push('mystring1');
myArr.push('mystring2');
window.location.href = 'example.com/index.php?myparam=' + encodeURIComponent(JSON.stringify(myArr));
PHP 后端站点:
$jsonStr = filter_input(\INPUT_GET, 'myparam', \FILTER_SANITIZE_STRING);
var_dump($jsonStr);
var_dump(json_decode($jsonStr, true));
第一个var_dump 正确打印json 字符串,第二个返回null。使用 assoc 标志(第二个json_encode 参数)不会改变任何东西。
我期望得到的:
array(2) { [0]=> string(9) "mystring1" [1]=> string(9) "mystring2" }
我实际上得到了什么:
NULL
var_dump for $jsonStr 为我返回以下内容:
string(41) "["mystring1","mystring2"]"
【问题讨论】:
-
您是否有机会为此使用 POST 并将 JSON 放入请求正文中?然后,您不必对其进行 URI 编码。无论如何,如果 json_decode 什么也没返回,它可能会失败 - 使用这个函数:php.net/manual/en/function.json-last-error-msg.php 找出原因。
-
如果您需要进一步的帮助,请显示
var_dump($jsonStr);的结果 -
使用上面给出的例子,没有错误:
$jsonStr = '{"mykey":["mystring1","mystring2"]}'; var_dump(json_decode($jsonStr, true));打印出预期的结果。这可能失败的唯一原因是您没有插入 JSON 字符串。因此,除非我们看到您的$jsonStr的真实输出,否则我们无法帮助您。 -
@feeela 是的。但我的意思是,如果你使用
json_decode('["mystring1","mystring2"]');,它会产生null。 -
@feeela 我怀疑问题是
encodeURIComponent(JSON.stringify(myArr))导致%5B%22mystring1%22%2C%22mystring2%22%5D当然不是有效的JSON,所以除非服务器已经解码,否则会有问题。我猜它可以颠倒过来,但使用 POST 并将 JSON 放在正文中会更简单(或者只使用普通的单独查询字符串参数)。
标签: javascript php json