Допустимые символы в URL: Регулярные выражения и примеры
Быстрый ответ
В URL разрешено использование буквенно-цифровых символов (A-Z
, a-z
, 0-9
), безопасных (-
, _
, .
, ~
), специальных (!
, *
, '
, (
, )
) и зарезервированных (;
, /
, ?
, :
, @
, &
, =
, +
, $
, ,
). Неподдерживаемые символы кодируются в процентах по их шестнадцатеричному ASCII-коду — например, %20
представляет пробел. Вот пример такого кодирования:
https://www.example.com/search?q=coding%20tips
Здесь %20
заменяет пробел, форматируя структурированный запрос с параметрами.
Роль символов в URL
Каждый символ в URL выполняет свою функцию. Знак вопроса ?
открывает строку запроса, а символ решетки #
указывает на начало идентификатора фрагмента. Благодаря структурированности URL они удобны в использовании и соответствуют стандартам.
Последовательности символов, например, ../
в URL позволяют подняться на уровень выше, но особые сочетания типа //
могут серьезно изменить смысл URL, возможно, перенаправив на другой сервер.
Сложные символы, вроде эмодзи или пробелов, требуют процентного кодирования, так как они не соответствуют стандартному ASCII. Например, эмодзи 😊 будет закодирован как %F0%9F%98%8A
.
При программном формировании URL полезно использовать функции типа encodeURIComponent()
в JavaScript для корректной обработки подобных символов.
Обоснование необходимости процентного кодирования
Символы типа &
и =
в URL требуют кодирования для избежания паразитного взаимодействия и сохранения их литерального значения.
Символы ASCII, не относящиеся к основным, и символы, используемые в международных URL, также стоит кодировать в процентах для правильной интерпретации серверами и клиентами.
Корректное кодирование URL избавляет от проблем с кешированием, обработкой запросов и угрозами безопасности, включая SQL-инъекции.
Визуализация
Возьмем для примера чемодан (🧳) для путешествий, упакованный согласно правилам:
| Чемодан (🧳) | Допустимое содержимое |
| ---------------| --------------------------------------------|
| URL (🧳) | A-Z, a-z, 0-9, "-", "_", ".", "~" |
Преобразуем запрещенные предметы в допустимый формат посредством процентного кодирования:
До (❌): [🍎, " ", 🎲, 😊]
После (✅): [🍎, "%20", 🎲, "%F0%9F%98%8A"] // Дорогой, я уменьшил детей
Бирки на багаж (🏷️) — scheme
, authority
, path
и другие компоненты помогают определить содержимое нашего цифрового чемодана, также как GPS помогает в путешествиях по интернету.
Лучшие практики при создании URL
Употребление некоторых небезопасных символов (<
, >
, "
, {
, }
, |
, \
, ^
, `
) может вызвать ошибки и угрозы безопасности. Рекомендуется избегать их в URL, как неслишком дружественных пользователей.
Необычные ситуации и поиск и устранение неполадок
Интерпретация URL в разных браузерах может отличаться. Проблематичные символы, такие как вертикальная черта |
, подчеркивают необходимость консистентности и надлежащего кодирования для обеспечения совместимости.
Пробелы — распространенная ошибка. Используйте код %20
или символ +
(в строках запроса) для обеспечения совместимости. В "космосе" ваших URL пробелы должны быть закодированы.
При включении пользовательского ввода в URL критически важно провести валидацию и кодирование, чтобы предотвратить возникновение нерабочих ссылок и уязвимости системы.
Полезные материалы
- RFC 3986 – Uniform Resource Identifier (URI): Generic Syntax — обязательное чтение для понимания структуры и синтаксиса URI.
- Character encodings: Essential concepts — вводный материал от W3C по вопросам символов и кодировок.
- encodeURIComponent() – JavaScript | MDN — подробное руководство по кодированию компонентов URI с использованием JavaScript.
- RFC 8141 – Uniform Resource Names (URNs) — всесторонние сведения о синтаксисе URN.
- What is URL Encoding and How does it work? | URLEncoder — доступное и ясное объяснение процентного кодирования с жизненными примерами.
- HTML Standard — стандарт HTML5, содержащий информацию об элементе
<a>
и его взаимодействии с URL. - (Please) Stop Using Unsafe Characters in URLs | Perishable Press — полезный список допустимых символов URL и лучших практик их использования.