0

URLEncodedUtils.parse(uri, encoding)是否以 URL 中提到的相同顺序返回参数?它是否返回具有重复名称的参数的所有值?

4

2 回答 2

3
public static void parse (
       final List <NameValuePair> parameters, 
       final Scanner scanner, 
       final String encoding) {
   scanner.useDelimiter(PARAMETER_SEPARATOR);
   while (scanner.hasNext()) {
       final String[] nameValue = scanner.next().split(NAME_VALUE_SEPARATOR);
       if (nameValue.length == 0 || nameValue.length > 2)
           throw new IllegalArgumentException("bad parameter");

        final String name = decode(nameValue[0], encoding);
        String value = null;
       if (nameValue.length == 2)
           value = decode(nameValue[1], encoding);
       parameters.add(new BasicNameValuePair(name, value));
   }
}

正如您在 parse-function 中看到的,它保留了 URL 中参数的顺序。但这是一个实现细节,没有记录,所以它可以在没有警告的情况下更改。你真的不应该在你的代码中依赖这种行为。

于 2011-08-03T13:03:18.463 回答
0

由于它返回一个列表,它应该按顺序返回名称-值对,并且还应该返回重复项。

但是,您不应依赖参数的顺序,而应通过它们的名称访问它们。无论如何,重复都是不好的,即lang=en&lang=de意味着什么?如果您需要一个列表,您最好执行类似的操作languages=en,de或提供更好的参数名称。

于 2011-08-03T12:16:06.413 回答