Некоторые символы не могут быть частью URL-адреса (например, пробел), а некоторые другие символы имеют особое значение в URL-адресе. В формах HTML символ =
используется для отделения имени от значения. Общий синтаксис URI использует кодировку URL для решения этой проблемы, в то время как HTML-формы делают некоторые дополнительные замены, а не применяют процентное кодирование для всех таких символов.
Например, пробелы в строке либо кодируются %20
, либо заменяются знаком плюс ( +
). Если вы используете символ вертикальной черты ( |
) в качестве разделителя, обязательно закодируйте вертикальную черту как %7C
. Запятая в строке должна быть закодирована как %2C
.
Рекомендуется использовать стандартные библиотеки построения URL-адресов вашей платформы для автоматического кодирования ваших URL-адресов, чтобы обеспечить правильное экранирование URL-адресов для вашей платформы.
Создание действительного URL-адреса
Вы можете подумать, что «действительный» URL-адрес самоочевиден, но это не совсем так. Например, URL-адрес, введенный в адресной строке браузера, может содержать специальные символы (например "上海+中國"
); браузер должен внутренне перевести эти символы в другую кодировку перед передачей. Точно так же любой код, который генерирует или принимает ввод UTF-8, может рассматривать URL-адреса с символами UTF-8 как «действительные», но также должен переводить эти символы перед их отправкой на веб-сервер. Этот процесс называется URL-кодированием или процентным кодированием .
Специальные символы
Нам необходимо перевести специальные символы, поскольку все URL-адреса должны соответствовать синтаксису, указанному в спецификации универсального идентификатора ресурса (URI) . Фактически это означает, что URL-адреса должны содержать только специальное подмножество символов ASCII: знакомые буквенно-цифровые символы и некоторые зарезервированные символы для использования в качестве управляющих символов в URL-адресах. В этой таблице приведены эти символы:
Набор | персонажи | Использование URL |
---|---|---|
буквенно-цифровой | abcdefghijklm nopqrstuvwxyz ABCDEFGHIJKLM NOPQRSTUVWXYZ 0 1 2 3 4 5 6 7 8 9 | Текстовые строки, использование схемы ( http ), порт ( 8080 ) и т. д. |
Незарезервировано | - _ . ~ | Текстовые строки |
Сдержанный | ! * ' ( ) ; : @ & = + $ , / ? % # [ ] | Управляющие символы и/или текстовые строки |
При создании допустимого URL-адреса необходимо убедиться, что он содержит только те символы, которые указаны в таблице «Сводка допустимых символов URL-адреса». Согласование URL-адреса с использованием этого набора символов обычно приводит к двум проблемам: пропуску и замене:
- Символы, с которыми вы хотите работать, существуют за пределами указанного выше набора. Например, символы иностранных языков, такие как
上海+中國
необходимо кодировать с использованием указанных выше символов. По популярному соглашению, пробелы (которые не допускаются в URL-адресах) часто также представляются с помощью символа плюс'+'
. - Символы существуют в указанном выше наборе как зарезервированные символы, но их необходимо использовать буквально. Например,
?
используется в URL-адресах для указания начала строки запроса; если вы хотите использовать строку «? и Мистерионы», вам нужно будет закодировать'?'
характер.
Все символы, которые должны быть закодированы в 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 |
Преобразование URL-адреса, который вы получаете от пользовательского ввода, иногда бывает сложной задачей. Например, пользователь может ввести адрес как «5th&Main St.» Как правило, вы должны создавать свой URL-адрес из его частей, рассматривая любой ввод пользователя как буквальные символы.
Кроме того, URL-адреса ограничены 8192 символами для всех веб-служб платформы Google Карт и статических веб-API. Для большинства служб это ограничение редко достигается. Однако обратите внимание, что у некоторых служб есть несколько параметров, которые могут привести к длинным URL-адресам.