2017-07-27 47 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