只是说我有以下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网址不包含任何查询字符串参数,这可以吗?
Tho*_*oft 19
根据RFC 3986:
查询组件由第一个问号(“?”)字符指示,并由数字符号(“#”)字符或 URI 的末尾终止。
因此以下 URI 是有效的:
http://www.example.com?next=http://www.example.com
以下RFC 摘录清楚地表明了这一点:
...由于查询组件通常用于以“键=值”对的形式携带标识信息,并且一个经常使用的值是对另一个 URI 的引用,因此有时避免对这些字符进行百分比编码会更好地提高可用性。
值得注意的是,RFC 3986 使 RFC 2396 变得过时。
CR *_*ost 12
RFC 2396秒.2.2表示你应该将那些符号用URL编码,而不是用于它们的明确含义; 即你应该永远形成targetUrl + '?next=' + urlencode(nextURL).
Web浏览器根本不"解码"那些参数; 浏览器对参数一无所知,只是传递了字符串.表单的查询字符串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)
Run Code Online (Sandbox Code Playgroud)
在后端,您需要解析结果.我认为PHP的$_REQUEST阵列已经为你完成了这个; 在其他语言中,您需要拆分第一个?字符,然后拆分&字符,然后拆分第一个=字符,然后urldecode名称和值.