为什么这个查询中断


Why This Query Breaks?

我有这个URL-

http://localhost/app_demo/sample.php?jsonRequest={"GenInfo":{"type":"Request","appname":"XXX","appversion":"1.0.0"},"searchDish":{"userId":"295","dishName":"","est":"Pizza &amp; Wings","location":"","type":"","priceRange":"","deviceos":"value","deviceId":"<UDID>","deviceType":"value","pageNo":"1"}}

当我点击这个URL并打印

print_r($_REQUEST['jsonRequest']);

字符串只打印到

{"GenInfo":{"type":"Request","appname":"XXX","appversion":"1.0.0"},"searchDish":{"userId":"295","dishName":"","est":"2 Pizza

我上网搜索,但没有得到答案。这个问题的解决方案是什么?请帮忙,谢谢。

查询字符串通常由键/值对组成,查询字符串的开头是问号(?),然后所有的键/值对以&分隔。在你的值中加入&号就像开始一个新参数。

然而,这不是正确的方法。你不应该把JSON放到查询字符串中。

如果确实必须在查询字符串中使用&符号,则使用%26而不是&。%26,这是与符号的十六进制值。

您应该发出POST请求而不是GET请求:

    <
  • 编码碰撞/gh>
  • URI长度限制

字符"&"是个问题,因为它是保留的。(是查询字符串参数分隔符)在GET请求中使用字符串之前,必须对其进行"urlencode"。所以像&被转换。但正如jValdron所指出的,你不应该在查询字符串中放入JSON,但你可以这样做。

所以你要对字符串进行urlencode:

$url = 'http://localhost/app_demo/sample.php?jsonRequest=';
$jsonRequest = urlencode('{"GenInfo":{"type":"Request","appname":"XXX","appversion":"1.0.0"},"searchDish":{"userId":"295","dishName":"","est":"Pizza &amp; Wings","location":"","type":"","priceRange":"","deviceos":"value","deviceId":"<UDID>","deviceType":"value","pageNo":"1"}}');
$url .= $jsonRequest;

然后是urldecode

print_r(urldecode($_REQUEST['jsonRequest']));

同样,您不应该在查询字符串中放入JSON