Как экранировать спецсимволы, например " \?", в строке url из java?

Пользователь

от sylvester , в категории: Java , год назад

Как экранировать спецсимволы, например " \?", в строке url из java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jazmyne , год назад

@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 символ ? является разделителем параметров и должен быть экранирован.

Пользователь

от maya , 9 месяцев назад

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