Каков лучший способ URL кодировать только ключи запроса и параметры в Java?

1

Я хотел бы кодировать только ключи запроса и параметры URL-адреса (не хотите кодировать /,? Или &). Какой лучший способ сделать это в Java?

Например, я хочу конвертировать

http://www.hello.com/bar/foo?a=,b &c =d

в

http://www.hello.com/bar/foo?a=%2Cb%20&c%20=d

Теги:
encoding
url-encoding
urlencode

2 ответа

0

Я собираюсь оставить фактическое кодирование компонентов как функцию, предоставляемую пользователем, потому что это существующая хорошо обсуждаемая проблема без тривиального решения JCL. В любом случае, следующим образом я хотел бы подойти к этой конкретной проблеме без использования сторонних библиотек.

Хотя регулярные выражения иногда приводят к двум проблемам, я не решаюсь предлагать более строгий подход, такой как URI, потому что я не знаю, как он будет - или даже если он будет - работать с такими фанковыми недопустимыми URL-адресами. Таким образом, это решение, использующее регулярное выражение с динамическим значением замены.

// The following pattern is pretty liberal on what it matches;
// It ought to work as long as there is no unencoded ?, =, or & in the URL
// but, being liberal, it will also match absolute garbage input.
Pattern p = Pattern.compile("\\b(\\w[^=?]*)=([^&]*)");
Matcher m = p.matcher("http://www.hello.com/bar/foo?a=,b &c =d");
StringBuffer sb = new StringBuffer();
while (m.find()) {
    String key = m.group(1);
    String value = m.group(2);
    m.appendReplacement(sb,
        encodeURIComponent(key) + "=" encodeURIComponent(value));
}
m.appendTail(sb);

См. Пример примера ideone с заполнением encodeURIComponent.

0

Создайте URL-адрес примерно так:

String url = "http://www.hello.com/bar/foo?";
url += "a=" + URLEncoder.encode(value_of_a);
url += "&c=" + URLEncoder.encode(value_of_c);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню