Как закодировать только часть URL

#java

#java

Вопрос:

У меня есть неполные URL-адреса, которые я перенаправляю (у меня нет полного URL-адреса), например

 a.jsp?id=269101|14000
 

и

 b.jsp?action=inamp;id=239394|2000amp;inmethod=
 

Я хотел закодировать "|" только символ канала, поэтому я начал с java.net.URI class, но он запрашивает полный URL.Итак, я использовал URLEncoder, но он кодирует весь URL.

Я знаю, что могу искать | в url и кодировать его напрямую, но каков был бы наилучший подход?

Комментарии:

1. Почему ваша строка уже собрана вместе, но с незакодированными частями? Вам следует избегать этого, поскольку это очень затрудняет его правильное кодирование. Используйте URLEncoder для кодирования значений, пока они все еще находятся за пределами конечной строки.

Ответ №1:

Использование String.replace() :

 String myUrl = "b.jsp?action=inamp;id=239394|2000amp;inmethod=";
myUrl = myUrl.replace("|","|");
 

Ответ №2:

Вам нужно использовать URLEncoder значение параметра для каждого запроса, которое необходимо закодировать.

 String url  = "b.jsp?action=in"  
                   "amp;id="   URLEncoder.encode("239394|2000", StandardCharsets.UTF_8)  
                   "amp;inmethod=";
System.out.println(url); // prints: b.jsp?action=inamp;id=239394|2000amp;inmethod=
 

Ответ №3:

Использование URLEncoder — правильный путь. Однако вы должны выполнить кодирование перед созданием своего полного URL-адреса. использование его для вашего полного URL-адреса приведет к кодированию всех специальных символов URL-адреса. Это не то, что вы хотите здесь

Измените свой код на что-то вроде этого

 String url = "a.jsp?id="   URLEncoder.encode("269101|14000",StandardCharsets.UTF_8);