Reputation: 1147
I have problems with the character +
(and maybe others) at the URIBuilder is suppose to get a decoded url but when I extract the query the +
is replaced
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();
the value of sing is AZrhQaTRSiys5GZtlwZ H3qUyIY=
with a space instead +
. How can I extract the correct value?
other way is:
URI uri = new URI(decodedUrl);
String query = uri.getQuery();
the value of query is sign=AZrhQaTRSiys5GZtlwZ+H3qUyIY=&more=boo
in this case is correct, but I have to strip it. Is there another way to do that?
Upvotes: 0
Views: 2751
Reputation: 1768
Use it differently:
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 method is responsible for adding parameters as to the builder. The constructor of the builder should include the base URL only.
If this URL is given to you as is, then the + is already decoded and stands for the space character. If you are the one who generates this URL, you probably skipped the URL encoding step (which can be done using the code snipped above).
Read a bit about URL encoding: http://en.wikipedia.org/wiki/Query_string#URL_encoding
Upvotes: 2
Reputation: 608
That is because if you send space as parameter in url it is encoded as +
. This happens because there are some rules which characters are valid in URL. See 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.
If you want to have +
as symbol in url you need to encode it into %2B
. For example 2+2
is encoded as 2%2B2
and i am
as i+am
. So in your case I believe you have to correct result as AZrhQaTRSiys5GZtlwZ+H3qUyIY
decodes into AZrhQaTRSiys5GZtlwZ H3qUyIY
.
Upvotes: 1