@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() для этой цели.