php 传值自动反解escape,无需自己urldecode

今天碰到一个问题,广告商那边给了一个跳转地址,如:

http://go.test.net/go.php?src=yite&wi=&style=3&url=http%3A%2F%2Fu.test.cn%2Ftg%2Freg%3Fsid%3D150%26style%3D3%26rnd%3D666

加上广告商的url 我这边的跳转地址为:

location.href="http://www.ys250.com/click.php?url="+escape('http://go.test.net/go.php?src=yite&wi=&style=3
&url=http%3A%2F%2Fu.test.cn%2Ftg%2Freg%3Fsid%3D150%26style%3D3%26rnd%3D666')

结果在 click.php 这个程序里面,用 $_GET['url']获取到的地址是:

#获取的地址为:
http://go.test.net/go.php?src=yite&wi=&style=3&url=http%3A%2F%2Fu.test.cn%2Ftg%2Freg%3Fsid%3D150%26style%3D3%26rnd%3D666


#本来意愿获取的地址是:
http%3A//stat.smggame.net/v2_jump.php%3Fsrc%3Dyite%26wi%3D%26style%3D3%26url%3Dhttp%253A%252F%252Fu.gamefy.cn%252Ftg
%252Freg%253Fsid%253D150%2526style%253D3%2526rnd%253D666

这个结果最后导致跳转不正确。后面查手册才知道原因

/*但是在JS中window.location=”url”的url中如果存在"&"这样的字符就不会正常进行跳转了,原因是JS"&"只是把他们看作正常字符而已   

但是都会进行urlencode()然后提交(鼠标移上去后可以在浏览器状态栏看到)

所以使用PHP变量在JS中嵌入url地址时要特别注意



当提交时,不论是 GET 或者 POST 方法,数据都会被浏览器进行 urlencode 来传输(第5点),并直接被 PHP urldecode。所以最终不需要自己处理任何
urlencode/urldecode,全都是自动处理的
*/

原因知道了吧,如果不用这个特征只能自己来处理$_SERVER变量。

posted on 2011-09-30 13:36  VirtualLife  阅读(1133)  评论(0)    收藏  举报

导航