2015-06-02 93 views
2

当连接到PayPal我用这样的URL(我在这里使用假值,但结构是真实的):贝宝被截断我返回查询字符串

https://www.paypal.com/cgi-bin/webscr?&business=ZDS346347&cmd=_xclick&amount=100&item_name=Test&no_note=1&no_shipping=1&rm=2&return=http://www.website.com/registration.php?paypal=1&classid=122&sessionid=264&studentid=2286

问题是,当我送这个URL,它截断从此我的返回值的查询字符串:

paypal=1&classid=122&sessionid=264&studentid=2286 

这样:

paypal=1 

返回值中的和号混淆了它,但我需要使用它们,以便可以在返回时处理这些查询字符串值。

有没有办法,我可以将整个返回字符串传递给PayPal,以便它在第一个&符号后不会被截断。

感谢,

克里斯

回答

0

包裹传递的URL与urlencode打开与号为贝宝解析的字符,那么当你的网址被称为使用urldecode来解码。

发生这种情况是因为PayPal的网址将?之后的所有内容简单地拆分为&符号的区块。它不知道什么时候是你的网站的一部分。所以它会发送PayPal classid=122作为自己的键/值对,而不是您网址的一部分。以这种方式对URL进行编码应使其正常工作。

编辑引用错误的PHP函数。进行urlencode /解码是GET参数传递,用htmlspecialchars是用于存储 HTML数据

+0

我可以看到我如何使用用htmlspecialchars使字符串不是由贝宝会出现问题,但后来当PayPal发送我的客户回来了,它赢得不会将它发送回正确的字符串 - 它会将其发送回带有特殊字符的字符串。那时候,解码它会迟到 - 或者我错过了什么? –

+0

请参阅编辑!意思是URLENCODE! PayPal _may_会自动正确调用回叫网址。我老实说不是100%确定,但我会先测试一下。我怀疑你需要做更多的工作。如果它不起作用,那就意味着你的'$ _GET'只有一个大字符串,只有第一个参数(在你的例子中,“paypal”等于其他所有内容)。简单地得到那个混乱的字符串,解码并爆炸,就像这样:'$ gets = explode('&',urldecode($ _ GET ['paypal']));'现在你可以把'gets'当作' $ _GET',设置正确。尽管如此,我怀疑PayPal会正确回拨。 – Bing

+0

谢谢,URLENCODE做到了! –