0

考虑以下网址

index.php?json={uid:guest|10001441}

我无法解码数据。我需要输出为{"uid":"guest|10001441"}.

我使用的代码是

if (isset($_GET['json']))
{
   $url_data = $_GET['json'];
   $decoded_data = json_decode($url_data,true);
   var_dump($decoded_data);
}

但它给了我输出为NULL. 我究竟做错了什么??我需要以不同的格式传递数据吗?

4

5 回答 5

2

似乎不可能解码没有双引号的 JSON 字符串,因为很难确定 JSON 字符串"{A:B:C}"是从编码{"A":"B:C"}还是从编码{"A:B":"C"}

您可以使用 urlencode() 对 JSON 字符串进行编码,或者忽略极端情况并手动添加双引号以使 JSON 字符串有效,希望对您有所帮助:D

于 2013-07-30T13:12:46.817 回答
1

您传递的数据不是有效的 JSON。它目前没有双引号。尝试这个:

if (isset($_GET['json']))
{
   $url_data = '"'.$_GET['json'].'"';
   $decoded_data = json_decode($url_data,true);
   var_dump($decoded_data);
}

输出:

string(20) "{uid:guest|10001441}"

另外,我建议使用POST而不是在GET这里。

于 2013-07-30T12:18:39.803 回答
1

您可以使用 base64_encode() 对 url 参数进行编码

$json=base64_encode('{"uid":"guest|10001441"}');

网址看起来像这样

index.php?json=eyJ1aWQiOiJndWVzdHwxMDAwMTQ0MSJ9

然后这样做:-

if (isset($_GET['json']))
{
   $url_data = base64_decode($_GET['json']);
   $decoded_data = json_decode($url_data,true);
   var_dump($decoded_data);
}
于 2013-07-30T12:25:05.027 回答
1

如果您像这样通过它,它将起作用:?json={"uid":"guest|10001441"}

但我不确定这是否是正确的方法。

于 2013-07-30T12:13:07.170 回答
0

您的 URL 中的 JSON 无效。uidPHP 的 json_decode 在和它的值周围寻找双引号。

编辑:您不能将数据存储为键值对,而不是将数据作为 json 存储在 URL 中,例如

?uid=value

然后你可以做类似的事情

$data = json_encode( $_GET );
于 2013-07-30T12:11:45.707 回答