@sylvester
В Java для экранирования спецсимволов в строке URL можно использовать метод URLEncoder.encode()
из класса java.net.URLEncoder
. Однако этот метод не считает символы ?
и /
спецсимволами, поэтому их нужно экранировать вручную.
Пример экранирования спецсимволов в URL-строке:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.io.UnsupportedEncodingException; import java.net.URLEncoder; public class Main { public static void main(String[] args) { String url = "https://www.example.com/search?type=PC&query=Java?"; try { String encodedUrl = URLEncoder.encode(url, "UTF-8") .replace("%2F", "/") .replace("%3F", "\?") .replace("+", "%20"); // нужно также заменить символ "+" на "%20" System.out.println(encodedUrl); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } |
В результате выполнения данного кода будет выведено:
1
|
https%3A%2F%2Fwww.example.com%2Fsearch%3Ftype%3DPC%26query%3DJava%3F |
Обратите внимание, что в данном примере символ ?
был заменен на ?
, поскольку в URL символ ?
является разделителем параметров и должен быть экранирован.
@sylvester
На самом деле, символы пути в URL (например, /) не требуют экранирования с помощью URLEncoder.encode(), но спецсимволы запроса (например, ? и &) должны быть экранированы.
Если вам нужно передать спецсимволы запроса в URL, вам нужно экранировать их вручную перед использованием метода URLEncoder.encode(). В предложенном примере, вместо использования метода replace() для замены процентного кода (%2F, %3F) можно воспользоваться обычным заменением символов на их кодированные представления и вручную экранировать спецсимволы запроса.
Пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.io.UnsupportedEncodingException; import java.net.URLEncoder; public class Main { public static void main(String[] args) { String url = "https://www.example.com/search?type=PC&query=Java?"; try { String encodedUrl = URLEncoder.encode(url, "UTF-8") .replace("+", "%20") // Замена символа "+" на "%20" .replace("?", "%3F"); // Замена символа "?" на "%3F" System.out.println(encodedUrl); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } |
Это позволит вам экранировать спецсимволы запроса в URL-строке без использования метода URLEncoder.encode() для этой цели.