从 URL 中提取参数

Extract parameters from URL

我对 URIBuilder 中的字符 +(可能还有其他)有疑问,应该得到解码 url 但是当我提取查询时 + 被替换

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=,space 而不是 +。如何提取正确的值?

另一种方式是:

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

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

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

It is necessary to encode any characters disallowed in a URL, including spaces and other binary data not in the allowed character set, using the standard convention of the "%" character followed by two hexadecimal digits.

如果你想要+作为url中的符号,你需要将它编码成%2B。例如 2+2 编码为 2%2B2i am 编码为 i+am。因此,在您的情况下,我相信您必须更正结果,因为 AZrhQaTRSiys5GZtlwZ+H3qUyIY 解码为 AZrhQaTRSiys5GZtlwZ H3qUyIY.

不同的用法:

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 按原样提供给您,那么 + 已经被解码并代表 space 字符。如果您是生成此 URL 的人,您可能跳过了 URL 编码步骤(可以使用上面截取的代码来完成)。

阅读一些关于 URL 编码的内容:http://en.wikipedia.org/wiki/Query_string#URL_encoding