56

我试图通过以下方式将多维 Javascript 数组传递到我网站上的另一个页面:

  • 在数组上使用 JSON.stringify

  • 将结果值分配给输入字段

  • 将该字段发布到第二页

  • 在发布的值上使用 json_decode

  • 然后 var_dump 进行测试

  • (直接回显发布的变量只是为了看看它是否通过了)

第一页的Javascript:

var JSONstr = JSON.stringify(fullInfoArray);
document.getElementById('JSONfullInfoArray').value= JSONstr;

第二页的php:

$data = json_decode($_POST["JSONfullInfoArray"]);
var_dump($data);

echo($_POST["JSONfullInfoArray"]);

回声工作正常,但 var_dump 返回 NULL

我做错了什么?


这让我解决了:

$postedData = $_POST["JSONfullInfoArray"];
$tempData = str_replace("\\", "",$postedData);
$cleanData = json_decode($tempData);
var_dump($cleanData);

我不知道为什么,但是帖子通过一堆“\”字符分隔字符串中的每个变量

json_last_error()用 Bart 的建议弄清楚了,它返回了JSON_ERROR_SYNTAX

4

7 回答 7

47

当您使用 JSON.stringify() 保存一些数据,然后需要在 php 中读取这些数据时。以下代码对我有用。

json_decode( html_entity_decode( stripslashes ($jsonString ) ) );

感谢@Thisguyhastwothumbs

于 2018-03-07T11:54:14.607 回答
32

当您使用 JSON stringify 时,请先使用 html_entity_decode,然后再使用 json_decode。

$tempData = html_entity_decode($tempData);
$cleanData = json_decode($tempData);
于 2014-03-26T10:27:15.547 回答
26

您需要检查$_POST["JSONfullInfoArray"]. 如果某些东西不解析json_decode只会返回null。这不是很有帮助,因此当null返回时,您应该检查json_last_error()以获取有关问题所在的更多信息。

于 2013-04-13T10:42:51.913 回答
10

在我的情况下,其他答案都不起作用,很可能是因为 JSON 数组包含特殊字符。什么为我解决了它:

Javascript(添加了 encodeURIComponent)

var JSONstr = encodeURIComponent(JSON.stringify(fullInfoArray));
document.getElementById('JSONfullInfoArray').value = JSONstr;

PHP(与问题相同)

$data = json_decode($_POST["JSONfullInfoArray"]);
var_dump($data);

echo($_POST["JSONfullInfoArray"]);

已验证 echo 和 var_dump 在包含 URL 字段和长文本字段的 2000 多个用户输入数据集的样本上工作正常,并且在 var_dump 上为包含带有字符的 URL 的子集返回 NULL ?&#

于 2016-06-04T00:47:47.230 回答
8
stripslashes(htmlspecialchars(JSON_DATA))
于 2014-09-24T07:12:51.597 回答
2
jsonText = $_REQUEST['myJSON'];

$decodedText = html_entity_decode($jsonText);

$myArray = json_decode($decodedText, true);`
于 2018-01-22T10:30:40.910 回答
0

我不知道这是如何工作的,但它确实有效。

$post_data = json_decode(json_encode($_POST['request_key']));
于 2020-03-02T07:21:13.237 回答