URL-кодирование (также называемое процентным кодированием) — это механизм кодирования информации в Uniform Resource Identifier (URI) таким образом, чтобы в итоговой строке присутствовали только символы, разрешённые стандартом RFC 3986. Любой символ, не входящий в категорию незарезервированных (A–Z, a–z, 0–9, -, _, ., ~), заменяется знаком процента и двумя шестнадцатеричными цифрами, представляющими значение байта UTF-8 данного символа — например, пробел становится %20, а & превращается в %26.
Процентное кодирование необходимо, поскольку URL может содержать лишь ограниченный набор ASCII-символов. Если URL включает символы вне этого набора — пробелы, буквы Unicode, такие символы как &, = или /, используемые как буквальные значения, а не структурные разделители, — их нужно закодировать, чтобы парсер URL не интерпретировал их неверно. Это особенно критично для значений строки запроса, где незакодированные & или = нарушат структуру параметров.
Зачем использовать этот инструмент?
Мгновенно увидеть, как текст кодируется в обоих режимах, с живым сравнением бок о бок — без необходимости писать код для проверки граничных случаев.
⚡
Живой предпросмотр
Вывод обновляется по мере ввода. Попробуйте разные входные данные и сразу увидьте, какие символы кодируются, а какие остаются без изменений.
🔀
Два режима
Переключайтесь между encodeURIComponent (для значений) и encodeURI (для полных URL), не покидая страницу.
🔒
Только на стороне клиента
Всё кодирование выполняется локально в вашем браузере. Конфиденциальные параметры запроса и токены никогда не попадают на сервер.
📋
Копирование одним кликом
Скопируйте закодированный результат в буфер обмена одной кнопкой. Готово для вставки прямо в код, терминал или адресную строку браузера.
Как использовать этот онлайн-кодировщик URL
Без регистрации, без установки. Вставьте или введите текст в поле ввода — и результат с процентным кодированием появится мгновенно. Всё работает в вашем браузере — данные никогда не покидают ваше устройство.
1
Вставьте текст или URL
Введите любую строку — значение параметра запроса, полный URL, сегмент пути или JSON-данные. Кодировщик обрабатывает её посимвольно в соответствии с RFC 3986.
2
Выберите режим кодирования
Выберите encodeURIComponent для кодирования отдельных значений параметров (кодирует всё, кроме незарезервированных символов). Выберите encodeURI для кодирования полного URL с сохранением структурных символов, таких как ://?#&=.
3
Скопируйте закодированный результат
Строка с процентным кодированием появляется мгновенно. Нажмите Копировать, чтобы скопировать результат и вставить его в вызов API, действие формы или файл конфигурации.
4
Декодируйте обратно при необходимости
Допустили ошибку или хотите проверить результат? Перейдите к инструменту URL Decode одним кликом, чтобы обратить кодирование.
Какие символы кодируются?
RFC 3986 делит символы URL на две категории: незарезервированные (никогда не кодируются) и зарезервированные (имеют специальное значение — кодируются или сохраняются в зависимости от контекста). В таблице ниже показано, как две JavaScript-функции обрабатывают ключевые символы:
Символ
Значение в URL
encodeURIComponent
encodeURI
Space
word separator
%20
%20
+
plus sign
%2B
%2B
/
path separator
%2F
/ (kept)
?
query start
%3F
? (kept)
#
fragment
%23
# (kept)
&
param separator
%26
& (kept)
=
param value
%3D
= (kept)
@
auth separator
%40
@ (kept)
:
scheme / port
%3A
: (kept)
%
percent literal
%25
%25
~
unreserved
~ (kept)
~ (kept)
-_.~
unreserved set
kept as-is
kept as-is
encodeURIComponent vs encodeURI
JavaScript предоставляет две функции кодирования с принципиально разным поведением. Выбор не той функции — одна из самых распространённых ошибок при работе с URL:
encodeURIComponent()
Кодирует всё, кроме незарезервированного набора символов (A–Z a–z 0–9 - _ . ~). Это правильный выбор для кодирования значений отдельных параметров запроса, сегментов пути или любого значения, встраиваемого в URL. Кодирует /, ?, #, & и все остальные зарезервированные символы.
encodeURI()
Сохраняет всю структуру URL, оставляя зарезервированные символы (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) некодированными. Используйте только тогда, когда у вас есть полный URL со структурой, которую нужно сохранить, и требуется закодировать лишь не-ASCII или недопустимые символы внутри него.
Типичные случаи использования
Параметры строки запроса
Кодируйте значения параметров перед добавлением в URL: name=John%20Doe вместо name=John Doe. Незакодированные пробелы и специальные символы нарушат работу парсеров URL и приведут к непредсказуемым результатам.
Формирование API-запросов
REST API требуют корректно закодированных параметров запроса. Кодирование значений с помощью encodeURIComponent предотвращает внедрение лишних параметров через символы & и = внутри значений.
Отправка данных формы
HTML-формы по умолчанию отправляют данные в формате application/x-www-form-urlencoded. Понимание процентного кодирования помогает отлаживать то, что браузер отправляет и что сервер получает.
Сегменты пути со специальными символами
Имена файлов или идентификаторы, содержащие пробелы, косые черты или символы Unicode, должны быть закодированы при использовании в качестве сегментов пути URL: /files/my%20document.pdf.
OAuth и Auth-токены
OAuth 1.0a и ряд протоколов аутентификации требуют, чтобы базовая строка формировалась из процентно-закодированных имён и значений параметров согласно строгому алгоритму нормализации.
Deep Links и URL для шаринга
При генерации URL для распространения, встраивающих пользовательский контент (поисковые запросы, состояние фильтров, координаты), кодируйте все динамические значения во избежание битых ссылок и XSS через манипуляции с URL.
Примеры кода
URL-кодирование строк в популярных языках и окружениях:
JavaScript (browser / Node.js)
// Encode a query parameter value (most common case)
encodeURIComponent('hello world & more') // → "hello%20world%20%26%20more"
// Encode a complete URL (preserves ://?#& structure)
encodeURI('https://example.com/path?q=hello world') // → "https://example.com/path?q=hello%20world"
// Build a query string safely
const params = new URLSearchParams({ q: 'hello world', lang: 'en' })
const url = `https://example.com/search?${params}` // uses + for spaces
Python
from urllib.parse import quote, urlencode, quote_plus
# Encode a path segment or query value
quote('hello world & more') # → 'hello%20world%20%26%20more'
# Encode for application/x-www-form-urlencoded (space → +)
quote_plus('hello world') # → 'hello+world'
# Build a query string
urlencode({'q': 'hello world', 'lang': 'en'}) # → 'q=hello+world&lang=en'
Node.js (URL API)
const url = new URL('https://example.com/search')
url.searchParams.set('q', 'hello world & more')
url.searchParams.set('lang', 'en')
console.log(url.toString())
// → https://example.com/search?q=hello+world+%26+more&lang=en
Несколько инструментов могут кодировать текст в процентном формате, но они различаются по управляемости, конфиденциальности и контексту.
Этот инструмент
Работает в браузере, мгновенно, конфиденциально. Поддерживает режимы encodeURIComponent и encodeURI. Данные не отправляются ни на один сервер. Обрабатывает полный ввод Unicode.
Адресная строка браузера
Браузеры автоматически кодируют URL при вставке, но лишь частично — многие специальные символы сохраняются для удобства чтения. Не подходит для кодирования значений параметров.
URLSearchParams / urllib
Правильный программный подход для построения URL в JavaScript или Python. Используйте этот инструмент для быстрого разового кодирования или для проверки того, что выдаст ваш код.
Часто задаваемые вопросы
В чём разница между %20 и + для пробелов?
Оба обозначают пробел, но в разных контекстах. %20 — стандартное процентное представление пробела, действительное в любом месте URL. Знак + обозначает пробел только в формате application/x-www-form-urlencoded (отправка HTML-форм). В пути URL или в сыром значении запроса + является буквальным знаком плюс, а не пробелом. Используйте %20 для максимальной совместимости.
Когда использовать encodeURIComponent, а когда encodeURI?
encodeURIComponent — для отдельных значений (параметры запроса, сегменты пути, фрагменты). encodeURI — только когда есть полный URL и нужно сохранить его структуру. Распространённая ошибка — применение encodeURI к значению параметра: при этом & и = остаются незакодированными и ломают строку запроса.
Обрабатывает ли URL-кодирование символы Unicode?
Да. Символы вне ASCII сначала преобразуются в их UTF-8-байтовое представление, затем каждый байт кодируется процентным способом. Например, знак евро € (U+20AC) кодируется в %E2%82%AC — три байта UTF-8. Как encodeURIComponent, так и encodeURI корректно обрабатывают это во всех современных браузерах.
Является ли двойное кодирование проблемой?
Да. Если закодировать уже закодированную строку, %20 превратится в %2520 (сам % кодируется в %25). Всегда кодируйте исходные значения, а не уже закодированные. Если не уверены — сначала раскодируйте, затем закодируйте заново.
Какие символы всегда безопасны в URL?
Незарезервированные символы, определённые RFC 3986, всегда безопасны и никогда не требуют кодирования: прописные A–Z, строчные a–z, цифры 0–9, дефис (-), подчёркивание (_), точка (.) и тильда (~). Всё остальное должно быть закодировано процентным способом, если используется как значение, а не как структурный разделитель.
Почему в одних URL шестнадцатеричные символы в верхнем регистре (%2F), а в других — в нижнем (%2f)?
Оба варианта допустимы. RFC 3986 указывает, что процентно-закодированные последовательности нечувствительны к регистру, поэтому %2F и %2f эквивалентны. Однако та же RFC рекомендует использовать шестнадцатеричные цифры в верхнем регистре для единообразия. Большинство браузеров и библиотек генерируют верхний регистр.
Этот инструмент кодирует весь URL или только параметры?
И то, и другое. Используйте режим encodeURIComponent для кодирования отдельных значений параметров запроса (наиболее распространённый случай). Используйте режим encodeURI для кодирования полного URL с сохранением структурных символов, таких как ://, ?, # и &.
Есть ли ограничение на длину при кодировании?
Серверных ограничений нет — инструмент работает полностью в вашем браузере. Практические ограничения зависят от памяти браузера. Для очень больших входных данных или пакетной обработки используйте encodeURIComponent в скрипте.