从URL中提取参数

时间:2015-03-26 08:42:07

标签: java url uri http-request-parameters uribuilder

我在URIBuilder中遇到字符+(也许是其他人)的问题是假设要获取已解码的网址,但是当我提取查询时,+被替换

String decodedUrl = "www.foo.com?sign=AZrhQaTRSiys5GZtlwZ+H3qUyIY=&more=boo";
URIBuilder builder = new URIBuilder(decodedUrl);
List<NameValuePair> params = builder.getQueryParams();
String sign = params.get(0).getValue();

sing的值为AZrhQaTRSiys5GZtlwZ H3qUyIY=,而空格为+。如何提取正确的值?

其他方式是:

URI uri = new URI(decodedUrl);
String query = uri.getQuery();

在这种情况下,查询的值是sign=AZrhQaTRSiys5GZtlwZ+H3qUyIY=&more=boo是正确的,但我必须删除它。还有另一种方法吗?

2 个答案:

答案 0 :(得分:2)

以不同方式使用:

String decodedUrl = "www.foo.com";
URIBuilder builder = new URIBuilder(decodedUrl);
builder.addParameter("sign", "AZrhQaTRSiys5GZtlwZ+H3qUyIY=");
builder.addParameter("more", "boo");
List<NameValuePair> params = builder.getQueryParams();
String sign = params.get(0).getValue();

addParameter方法负责为构建器添加参数。构建器的构造函数应仅包含基本URL。

如果这个URL按原样给出,则+已经解码并代表空格字符。如果您是生成此URL的人,则可能会跳过URL编码步骤(可以使用上面提到的代码完成)。

了解一下网址编码:http://en.wikipedia.org/wiki/Query_string#URL_encoding

答案 1 :(得分:1)

这是因为如果您在url中将空格作为参数发送,则会将其编码为+。发生这种情况是因为在URL中有一些字符有效的规则。请参阅URL RFC

  

必须使用“%”字符后跟两个十六进制数字的标准约定对URL中不允许的任何字符进行编码,包括不在允许字符集中的空格和其他二进制数据。

如果您想在网址中使用+作为符号,则需要将其编码为%2B。例如,2+2编码为2%2B2i am编码为i+am。因此,在您的情况下,我认为您必须更正结果,因为AZrhQaTRSiys5GZtlwZ+H3qUyIY会解码为AZrhQaTRSiys5GZtlwZ H3qUyIY