URL-кодирование: encode и decode онлайн

«а б» → %D0%B0%20%D0%B1: каждый байт UTF-8 записывается как «%» и две шестнадцатеричные цифры

12 символов
61 символ

12 символов → 61 символ в кодировке URL
Коды символов при URL-кодировании (percent-encoding, UTF-8)
СимволКомпонентВесь URLПримечание
␣ (пробел)%20%20пробел
!!!не кодируется
"%22%22кавычка
#%23#решётка, начало якоря
$%24$
%%25%25сам знак процента
&%26&разделитель параметров
'''апостроф, не кодируется
(((
)))
***
+%2B+плюс
,%2C,запятая
/%2F/слеш, разделитель пути
:%3A:двоеточие
;%3B;
=%3D=знак равенства
?%3F?начало строки запроса
@%40@
[%5B%5B
]%5D%5D
~~~тильда, не кодируется
а%D0%B0%D0%B0кириллица, 2 байта
я%D1%8F%D1%8Fкириллица, 2 байта
ё%D1%91%D1%91кириллица, 2 байта
%E2%82%AC%E2%82%ACевро, 3 байта

Что такое percent-encoding по RFC 3986

В ссылке по RFC 3986 без кодирования допустимы 66 незарезервированных символов — латиница, цифры и - . _ ~ — и 18 зарезервированных: / делит путь, ? начинает запрос, & разделяет параметры. Остальное передаётся байтами, каждый — как % и две шестнадцатеричные цифры: пробел → %20, сам процент → %25. Плюс вместо пробела пришёл из HTML-форм и допустим только после ?; плюс в параметре — %2B.

Как закодировать кириллицу в URL

Текст переводится в UTF-8, где русская буква занимает 2 байта, и буква даёт 6 знаков: «а» → %D0%B0, «Привет, мир!» — 61 знак вместо 12. Так выглядит ссылка, скопированная из браузера. Домен в кириллице — это Punycode, а не проценты: конвертер.рф → xn—b1agarpfrbq.xn—p1ai; латиницу для адреса даёт транслитерация.

Чем отличается encodeURI от encodeURIComponent

Режим «компонент» (encodeURIComponent) не трогает 71 символ — латиницу, цифры и - _ . ! ~ * ' ( ) — и кодирует прочее. Он для значения параметра: «Tom & Jerry» → Tom%20%26%20Jerry, иначе & разорвёт запрос. Режим «весь URL» (encodeURI) оставляет ещё 11 разделителей (; , / ? : @ & = + $ #) — для собранной ссылки: в режиме «компонент» https:// станет https%3A%2F%2F.

Что такое двойное кодирование

Строку закодировали дважды, и % стал %25: %20 → %2520, «а» → %25D0%25B0. Так бывает, когда параметр кодируют вручную, а потом — ещё и библиотека. Base64 в параметре тоже кодируют: + и / зарезервированы.

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

Что означает %20 в ссылке?

Это пробел: его код в ASCII — 32, в шестнадцатеричной записи 20. Пробел в адресе недопустим, поэтому «сантиметры в дюймы» в строке запроса передаётся с двумя %20 между словами.

Как закодировать кириллицу в URL?

Сначала текст переводится в UTF-8, где русская буква занимает 2 байта, затем каждый байт записывается как «%» и две шестнадцатеричные цифры: «а» → %D0%B0, «я» → %D1%8F, «ё» → %D1%91. Одна буква даёт 6 знаков.

Чем отличается encodeURI от encodeURIComponent?

encodeURIComponent кодирует всё, кроме латиницы, цифр и знаков - _ . ! ~ * ( ) и апострофа, поэтому подходит для значения параметра. encodeURI оставляет ещё 11 разделителей адреса (: / ? # & = + $ , ; @) и нужен для целой ссылки.

Почему пробел иногда кодируется как плюс?

Плюс вместо пробела — правило формата HTML-форм application/x-www-form-urlencoded, оно действует только в строке запроса после «?». По RFC 3986 пробел — %20, а сам плюс в значении параметра — %2B.

Что такое двойное кодирование URL?

Уже закодированную строку закодировали ещё раз: знак «%» стал %25, и %20 превратился в %2520, а «а» — в %25D0%25B0. Признак ошибки — %25 в ссылке, лечится одним лишним декодированием.

Почему ссылка не декодируется?

После каждого «%» должны стоять ровно две шестнадцатеричные цифры, а байты — складываться в UTF-8. «100%» вместо 100%25 или старая ссылка в Windows-1251 («а» → %E0) дают ошибку.

Расчёты носят справочный характер: коэффициенты взяты из официальных определений единиц, но округление при выводе может давать расхождение в последнем знаке. Откуда данные

Обновлено