2017-07-27 50 views
0

我有一個URI,其參數是這樣的,逃逸編碼在解析查詢參數的Android

ID = ahshshs + 24 當我解析由所述參數,

String id = uri.getQueryParameter("id"); 

我得到的答覆爲

ahshshs 24

將'+'替換爲空格。我知道這是因爲uri被編碼並被替換。有沒有辦法,以獲得價值,沒有編碼?

+0

而形成的URI,而不是使用+,對其進行編碼,這樣你就可以在以後解碼和將其解釋爲+而不是空格。你可以使用'%2B'來編碼它。 – Arpit

回答

0

感謝您的答覆,我使用UrlQuerySanitizer做了它

String encodedParameter = URLEncoder.encode("+", "UTF-8"); 

在這種情況下,+將進行編碼。 在這裏寫代碼。 首先,我擴展了UrlQuerySanitizer類作爲

public class CustomUrlQuerySanitizer extends UrlQuerySanitizer { 
    @Override 
    protected void parseEntry(String parameter, String value) { 
//  String unescapedParameter = unescape(parameter); 
     ValueSanitizer valueSanitizer = 
       getEffectiveValueSanitizer(parameter); 

     if (valueSanitizer == null) { 
      return; 
     } 
//  String unescapedValue = unescape(value); 
     String sanitizedValue = valueSanitizer.sanitize(value); 
     addSanitizedEntry(parameter, sanitizedValue); 
    } 
} 

然後,解析的網址,

String id = null; 
if (uri != null) { 
    UrlQuerySanitizer urlQuerySanitizer = new CustomUrlQuerySanitizer(); 

    urlQuerySanitizer.registerParameter("id", 
      new UrlQuerySanitizer.IllegalCharacterValueSanitizer(
        UrlQuerySanitizer.IllegalCharacterValueSanitizer.ALL_OK 
      )); 
    urlQuerySanitizer.parseUrl(uri.toString()); 
    id = urlQuerySanitizer.getValue("id"); 
0

在創建它使用%2B的URL編碼。

參考link其中規定:

空格字符由'+」代替

一個相關的問題here,裏面有很多關於類似主題的更多細節(URL編碼)

0

我認爲你必須使用java.net.URLEncoder來編碼你的URL。

String encodedParameter = URLEncoder.encode(paramToEncode, codification); 

例如:爲%2B