将JSON字符串作为HTTP查询参数发送?

4
在我正在构建的一个项目的本地版本中,我将 JSON 字符串作为 HTTP 查询参数发送,并使用 json_decode() 函数将字符串解码回 PHP 数组。
在本地(XAMPP)环境中,这很好用,但是当我将这些文件上传到客户服务器时,它们不再起作用。我已经诊断出了问题,JSON 字符串传递的参数(例如o=[{"b_id":"1","p_ref_id":"SHAY899","b_name":"John Smith"}])没有被全局$_GET数组接收。
我认为可能需要 PHP 版本来编码/解码 JSON,但是我在此项目的其他部分中使用了 json_encode(),因此那不可能是问题所在。我想知道是否存在最大字符长度的问题,如果有,我该如何解决(或者至少从哪里开始解决)?
如果没有,任何其他帮助都将非常感激!

1
如果URL非常长,很可能会遇到某种限制。此外,许多网络服务(和框架)出于安全原因会阻止URL上的某些字符,例如为了防范XSS攻击。不过奇怪的是,您没有得到任何HTTP错误提示。 - Mike Christensen
在将JSON字符串作为查询字符串参数之前,您是否对其进行URL编码? - Brad M
@MikeChristensen 你认为什么样的URL才算是非常长?在基本配置(无框架)的PHP、Apache或其他地方,这个限制会在哪里设置? - Kemebear
我之前见过默认的 HTTP GET 限制是1024个字符。但我不知道在 Apache 中设置在哪里。 - Mike Christensen
2个回答

5

使用:

$string = urlencode(json_encode($array));

并使用
$array = urldecode(json_decode($string));

将字符串解码为PHP数组。

3

不要使用JSON,而是使用http_build_query()。它已经进行了URL编码,如果空间是问题,它可能会为您节省一些空间。它还可以处理多维数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接