从 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%2B2
,i 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
我对 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%2B2
,i 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