只是说我有以下的url,它的查询字符串参数是url:
http://www.someSite.com?next=http://www.anotherSite.com?test=1&test=2
我应该对next
参数进行url编码吗?如果我这样做,谁负责解码它 - 网络浏览器,或我的网络应用程序?
我问的原因是我看到许多大型网站都做了类似下面的事情
http://www.someSite.com?next=http://www.anotherSite.com/another/url
在上面,他们不打扰编码next
参数因为我猜,他们知道它本身没有任何查询字符串参数。如果我的next
url也不包含任何查询字符串参数,这样做可以吗?
答案 0 :(得分:8)
RFC 2396 sec. 2.2表示您应该将这些符号进行网址编码,而这些符号不会用于其明确含义;即你应该始终形成targetUrl + '?next=' + urlencode(nextURL)
。
网络浏览器无法解码'那些参数;浏览器对参数一无所知,只是传递了字符串。形式为http://www.example.com/path/to/query?param1=value¶m2=value2
的查询字符串由浏览器GET请求:
GET /path/to/query?param1=value¶m2=value2 HTTP/1.1
Host: www.example.com
(other headers follow)
在后端,您需要解析结果。我认为PHP的$_REQUEST
数组已经为你完成了这个;在其他语言中,您希望拆分第一个?
字符,然后拆分&
个字符,然后拆分第一个=
字符,然后将名称和价值。
答案 1 :(得分:0)
根据RFC 3986:
<块引用>查询组件由第一个问号(“?”)表示 字符并以数字符号(“#”)字符或 URI 的结尾。
所以以下 URI 是有效的:
http://www.example.com?next=http://www.example.com
RFC 的以下摘录清楚地说明了这一点:
<块引用>... 作为查询组件,常用于携带标识 以“键=值”对和一个经常使用的形式的信息 value 是对另一个 URI 的引用,有时更适合 避免对这些字符进行百分比编码的可用性。
值得注意的是,RFC 3986 使 RFC 2396 过时了。