В URL нельзя использовать некоторые символы, например пробел. Другие же имеют специальные функции. Например, в формах HTML символ =
отделяет параметр от его значения. По этой причине в универсальном синтаксисе URI применяется кодирование URL, в то время как в формах HTML такие символы не кодируются, а заменяются.
Например, пробелы в строке кодируются символами %20
или заменяются знаком плюса (+
). Если в качестве разделителя вы используете вертикальную черту (|
), ее нужно кодировать символами %7C
. Запятая в строке должна кодироваться символами %2C
.
Чтобы правильно экранировать URL на платформе, рекомендуется автоматически кодировать URL с помощью ее стандартных библиотек.
Создание действительного URL
URL, введенный в адресную строку браузера, не всегда бывает действительным. Он может содержать специальные символы (например, "上海+中國"
). Перед тем как выполнить переход по указанному адресу, браузер должен преобразовать эти символы в другую кодировку.
Аналогичным образом любой код, который создает или получает данные в формате UTF-8, может считать URL-адреса с символами UTF-8 действительными, но ему потребуется преобразовать эти символы, прежде чем отправлять их на веб-сервер.
Этот процесс называется кодированием URL или процентным кодированием.
Специальные символы
Необходимость преобразования символов связана с тем, что все URL должны соответствовать синтаксису, указанному в спецификации унифицированного идентификатора ресурсов (URI). На практике это значит, что URL должны содержать только определенный набор символов ASCII: стандартные буквенно-числовые символы и несколько зарезервированных символов, используемых в URL в качестве управляющих.
Набор | Символы | Использование в URL-адресе |
---|---|---|
Буквенно-числовые | a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 | Текстовые строки, схема (http ), порт (8080 ) и т. д. |
Незарезервированные | - _ . ~ | Текстовые строки |
Зарезервированные | ! * ' ( ) ; : @ & = + $ , / ? % # [ ] | Управляющие символы или текстовые строки |
При создании действительного URL-адреса необходимо использовать только символы из таблицы. Обычно это приводит к пропускам или заменам:
- Если символы, которые вы хотите использовать, отсутствуют в указанном выше наборе. Например, символы на иностранных языках, такие как
上海+中國
, нужно преобразовать с помощью символов из таблицы. По общепринятому соглашению пробелы (которые запрещены в URL) часто передаются с помощью знака плюса'+'
. - Если зарезервированные символы нужно использовать в их первоначальном значении.
Например, символ
?
используется в URL-адресах для обозначения начала строки запроса. Если вы хотите передать строку "? and the Mysterions", вам необходимо закодировать вопросительный знак ('?'
).
Кодирование URL проводится с помощью символа '%'
и двухсимвольного шестнадцатеричного значения, соответствующего данному символу в UTF-8. Например, 上海+中國
в UTF-8 будет закодирован для URL как %E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B
. Строка ? and the Mysterians
будет закодирована для URL как %3F+and+the+Mysterians
или %3F%20and%20the%20Mysterians
.
Часто используемые символы, требующие кодирования
Ниже показаны закодированные значения для некоторых популярных символов:
Символ | Закодированное значение |
---|---|
Пробел | %20 |
" | %22 |
< | %3C |
> | %3E |
# | %23 |
% | %25 |
| | %7C |
Процентное кодирование текста, который вводит пользователь, может оказаться непростой задачей. Например, он может ввести адрес как "5th&Main St." Обычно URL необходимо создавать из отдельных частей, обрабатывая все вводимые пользователем данные как символьные литералы.
Кроме того, URL для всех веб-сервисов платформы Google Карт и Maps Static API могут содержать не более 8192 символов. Для большинства сервисов это ограничение превышается крайне редко, но в некоторых случаях из-за ряда параметров длина URL может существенно увеличиться.