考虑以下网址
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
。我究竟做错了什么??我需要以不同的格式传递数据吗?
答案 0 :(得分:2)
似乎不可能在没有双引号的情况下解码JSON字符串,因为很难确定JSON字符串"{A:B:C}"
是来自{"A":"B:C"}
还是来自{"A:B":"C"}
您可以使用urlencode()对JSON字符串进行编码,或者只是忽略极端情况并手动添加双引号以使JSON字符串有效,希望此帮助:D
答案 1 :(得分:1)
如果您这样传递它,它将起作用:?json={"uid":"guest|10001441"}
但我不确定这是否是一种正确的方法。
答案 2 :(得分: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
。
答案 3 :(得分:1)
您可以使用base64_encode()
对url参数进行编码$json=base64_encode('{"uid":"guest|10001441"}');
url看起来像这样
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);
}
答案 4 :(得分:0)
您网址中的JSON无效。 PHP的json_decode在uid
及其值附近查找双引号。
编辑:不是将数据存储在URL中,因为json不能将数据存储为键值对,例如
?uid=value
然后你可以做类似
的事情$data = json_encode( $_GET );