有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

解析查询参数安卓时的java转义编码

我有一个uri,它的参数如下

id=ahshshs+24 When I am parsing the parameter by,

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

我得到的答复如下:

ahshshs 24

“+”被一个空格替换。我知道这是因为uri被编码并被替换。有没有一种方法可以不用编码就得到值


共 (4) 个答案

  1. # 1 楼答案

    我认为您必须使用java对URL进行编码。网URL编码器

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

    例如:

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

    在这种情况下,+将被编码为%2B

  2. # 2 楼答案

    感谢您的回复,我已经使用URLQueryInitiatizer完成了。 在这里编写代码。 首先,我将URLQueryInitiatizer类扩展为

    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);
        }
    }
    

    然后,将url解析为

    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");
    
  3. # 3 楼答案

    使用%2B代替+符号

    所以参数应该类似于dahshs%2B24

    更多详情Characters and symbols

  4. # 4 楼答案

    创建URL时,请使用%2B对其进行编码

    请参阅link,其中说明:

    Space characters are replaced by `+'

    一个相关的问题here,其中有关于类似主题的更多详细信息(URL编码)