【发布时间】:2018-02-13 22:05:39
【问题描述】:
我认为使用getQuery 会丢失信息,是危险的,而应该只使用getRawQuery,并且任何已知被编码的查询参数值都应该手动解码(一旦原始查询被拆分& 字符)和URLDecoder。
恰当的例子:假设您的 URL www.example.com 带有两个查询参数:
- 参数
url,值为=www.otherexample.com?b=2&c=3 - 一个不起眼的参数
d,值为4。
参数url应该是url编码的,所以你的应用看到的URI是:
www.example.com?url=www%2Eotherexample%2Ecom%3Fb%3D2%26c%3D3&d=4
现在,如果您使用getQuery 获取查询部分,您将获得以下信息:
url=www.otherexample.com?b=2&c=3&d=4
请注意,您已经丢失了信息,因为您无法确定 d 是 www.example.com 还是 www.otherexample.com 的查询参数。
如果您使用getRawQuery 获取查询部分,则会得到以下信息:
url=www%2Eotherexample%2Ecom%3Fb%3D2%26c%3D3&d=4
这一次,没有信息丢失,一切都很好。您可以根据需要解析查询部分并对 url 参数的值进行 URL 解码。
我错过了什么吗?
【问题讨论】: