2015-03-26 3 views
0

У меня есть проблемы с характером + (и, возможно, другие) в URIBuilder, предполагают, чтобы получить декодированный URL, но когда я извлечь запрос к + заменяютсяпараметров Извлекают из 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(); 

значения петь это AZrhQaTRSiys5GZtlwZ H3qUyIY= с пробелом вместо +. Как я могу извлечь правильное значение?

другой путь:

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

значение запроса sign=AZrhQaTRSiys5GZtlwZ+H3qUyIY=&more=boo в данном случае это правильно, но я должен лишить его. Есть ли другой способ сделать это?

ответ

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-адреса (что может быть сделано с использованием кода, снятого выше).

Читайте немного о кодировании URL: http://en.wikipedia.org/wiki/Query_string#URL_encoding

+0

true, но в моем случае у меня есть весь URL-адрес, и мне нужно его разбить. ваш ответ действителен в случае сборки нового URL-адреса. – xedo

+1

Отредактированный мой ответ (либо URL-адрес ошибочно построен, либо символ + обозначает пробел). – Eyal

+0

правый! url должен быть закодирован раньше – xedo

1

Это потому, что если вы отправляете пространство как параметр в url, оно кодируется как +. Это происходит потому, что есть некоторые правила, символы которых действительны в URL-адресе. См. URL RFC.

Необходимо кодировать символы запрещенные в URL, включая пробелы и другие двоичные данные не в допустимом наборе символов, используя стандартное соглашение о характере «%», а затем две шестнадцатеричные цифры.

Если вы хотите иметь +, как символ в URL нужно кодировать его в %2B. Например, 2+2 кодируется как 2%2B2 и i am как i+am. Поэтому в вашем случае я считаю, что вам нужно исправить результат, так как AZrhQaTRSiys5GZtlwZ+H3qUyIY декодирует в AZrhQaTRSiys5GZtlwZ H3qUyIY.

+0

Так вот значит, что мой 'decodedUrl' должны быть закодированы? – xedo