URL-кодировщик и декодировщик (encode/decode)

URL-encode и URL-decode онлайн: переводит специальные символы в percent-encoded формат %XX и обратно, раскодирует ссылку целиком. Четыре режима: encodeURIComponent, encodeURI, строго по RFC 3986 для подписей OAuth и AWS и как форма (URLSearchParams).

01Кодировщик02Сравнение03О кодировании04Вопросы05Похожие
01

Кодировщик и декодировщик

Режим
Функция
Вид
Исходная строка
Примерыадрес целиком кодирует encodeURI, остальные функции — для значения параметра
Результат · encodeURIComponent
Результат появится здесь…
Вход: 0 симв. · Выход: 0 симв.
02

Что кодирует каждая функция

encodeURIComponent агрессивнее — кодирует всё, кроме безопасных. encodeURI сохраняет структуру URL.
Символ
encodeURIComponent
encodeURI
A–Z a–z 0–9
Не кодируется
Не кодируется
- _ . ! ~ * ' ( )
Не кодируется
Не кодируется
: / ? # @ &
%3A %2F %3F %23 %40 %26
Не кодируется
= + , ;
%3D %2B %2C %3B
Не кодируется
Пробел
%20
%20
А–Я а–я (кириллица)
%D0%9F… (UTF-8)
%D0%9F… (UTF-8)
Китайский, арабский, эмодзи
%XX%XX… (UTF-8)
%XX%XX… (UTF-8)

Строго по RFC 3986 и как форма

Для значения параметра есть три правила записи: encodeURIComponent, строгий RFC 3986 для подписей OAuth и AWS и кодирование HTML-формы (URLSearchParams). Коды в таблице вычислены теми же функциями, что работают в кодировщике выше.

Символ
encodeURIComponent
RFC 3986
Форма
пробел
%20
%20
+
!
!
%21
%21
'
'
%27
%27
(
(
%28
%28
)
)
%29
%29
*
*
%2A
*
~
~
~
%7E
-
-
-
-
_
_
_
_
.
.
.
.
+
%2B
%2B
%2B
/
%2F
%2F
%2F
&
%26
%26
%26
=
%3D
%3D
%3D
?
%3F
%3F
%3F
#
%23
%23
%23

Строки, где режимы расходятся, — это ровно пять символов ! ' ( ) * плюс пробел и тильда. Остальное одинаково.

03

О URL-кодировании — что стоит знать

URL-кодирование (percent-encoding) представляет любые символы в URL с помощью ASCII-последовательностей вида %XX, где XX — шестнадцатеричный код байта в UTF-8. Нужно потому, что URL может содержать только ограниченный набор безопасных символов.

Выбор функции зависит от задачи: encodeURIComponent — для значения одного параметра запроса. encodeURI — для полного URL, когда нужно сохранить его синтаксис (двоеточия, слэши, вопросительные знаки).

Почему ! ' ( ) * кодируют не все. В RFC 3986 эти пять символов относятся к sub-delims — то есть в адресе они разрешены, и encodeURIComponent их не трогает. Но подписи OAuth 1.0a и AWS SigV4 требуют «процент-кодировать всё, кроме A–Z a–z 0–9 - _ . ~»: если хотя бы один из этих символов остался как есть, подпись не сойдётся и сервер вернёт ошибку. Поэтому для подписей и для сравнения адресов нужен строгий режим. Тильда ~ — наоборот: в RFC 3986 она unreserved и кодироваться не должна, хотя старые библиотеки по привычке превращают её в %7E. В формах (application/x-www-form-urlencoded) набор ещё другой: пробел становится +, тильда кодируется, а звёздочка остаётся.

encodeURIComponent

чаще всего
«привет мир!» → %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82%20%D0%BC%D0%B8%D1%80!
Кодирует всё, кроме букв, цифр и `- _ . ! ~ * ' ( )`. Символы `: / ? # @ & =` тоже кодируются — значение параметра не «сломает» структуру URL. Использовать для значений параметров ?q=… и данных форм.

encodeURI

для полных URL
«https://сайт.рф/поиск» → «https://%D1%81%D0%B0%D0%B9%D1%82.%D1%80%D1%84/…»
Сохраняет структуру URL: не кодирует `: / ? # [ ] @ ! $ & ' ( ) * + , ; =`. Использовать когда нужно передать полный адрес как строку, не разрушая его синтаксис.

Декодирование

%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82 → «привет»
Обратная операция — переводит %XX-последовательности обратно в читаемый текст. Поддерживается формат `+` вместо пробела из HTML-форм (application/x-www-form-urlencoded).

Percent-encoding

RFC 3986
%XX — где XX — hex-код байта в UTF-8
Каждый небезопасный символ представляется как `%XX`, где XX — hex-код байта в UTF-8. Кириллица занимает 2 байта (6 символов %XX%XX на букву), эмодзи — 4 байта.
04

Частые вопросы

Вставьте адрес в поле — кириллица и спецсимволы заменятся процентными последовательностями. Одна кириллическая буква в UTF-8 занимает два байта и превращается в шесть знаков вида `%D0%BF`. Такой адрес одинаково понимают все системы, включая почтовые клиенты и мессенджеры, которые ломают ссылку с юникодом при пересылке.

Обновлено

«» добавлен в избранное