我认为使用getQuery丢失信息是危险的,而且应该只使用getRawQuery,并且应该手动解码已知编码的任何查询参数值(一旦生成使用URLDecoder将查询拆分为&
个字符。
一个例子:假设您有一个带有两个查询参数的URL www.example.com
:
url
,其值为=www.otherexample.com?b=2&c=3
d
。参数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解码。
我错过了什么吗?
答案 0 :(得分:1)
您是正确的。 URI.getQuery()损坏了,您不应使用它。
奇怪的是,除了您的帖子外,我找不到对此的任何确认,这使我认为URI.getQuery可能对某些事情有用。但是经过一些我自己的测试,我很确定除非您的应用程序的查询字符串不遵循用&符号分隔参数的约定,否则不应该使用它。