2011-12-06 34 views
0

我有这个网址 -为什么此查询中断?

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 

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

+1

不要使用'$ _REQUEST'指定'$ _POST'或'$ _GET' – Jakub

回答

4

查询字符串通常由键/值对组成,查询字符串的起始位置是问号(?),然后所有对以“&”符号分隔(&)。在您的值中加上&符号就像开始一个新参数一样。

但是,这不是正确的做法。你不应该把JSON放在查询字符串中。

如果你真的必须在查询字符串的符号,使用%26,而不是&放。 %26是&字符的十六进制值。

2

你应该做一个POST请求而不是一个GET请求:

  • 编码冲突
  • URI长度限制
1

字符 “&” 的问题,因为它被保留。 (是查询字符串params分隔符) 在您的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查询字符串。