как правильно закодировать полную строку URL-адреса http?

Я получаю строку URL-адреса от пользователя и хочу преобразовать ее в допустимый URL-адрес http:

"http://one.two/three?four пять" должен превратиться в "http://one.two/three?four%20five< /сильный>"

однако URLEncoder не помогает, так как он кодирует всю строку (включая допустимый "://").

помощь?


person Amir Arad    schedule 20.07.2010    source источник


Ответы (2)


С внешней библиотекой:

import org.apache.commons.httpclient.util.URIUtil;
String myUrl_1= "http://one.two/three?four five";
System.out.println(URIUtil.encodeQuery(myUrl_1));

И вывод:

http://one.two/three?four%20five

Or

String webResourceURL = "http://stackoverflow.com/search?q=<script>alert(1)</script> s";
System.out.println(URIUtil.encodeQuery(webResourceURL));

И вывод:

http://stackoverflow.com/search?q=%3Cscript%3Ealert(1)%3C/script%3E%20s

И зависимость Maven

<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>
person Xelian    schedule 07.02.2017

Используйте класс URL. Например:

URL url = new URL(urlString);
String encodedQueryString = URLEncoder.encode(url.getQuery());
String encodedUrl = urlString.replace(url.getQuery(), encodedQueryString);

Третья строка может быть другой — например, создание нового URL из всех его частей.

person Bozho    schedule 20.07.2010
comment
Должны ли мы кодировать разделители параметров запроса, такие как ? и =? - person Ajinkya; 30.01.2015