URL-кодирование: encode и decode онлайн
«а б» → %D0%B0%20%D0%B1: каждый байт 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) дают ошибку.
Похожие конвертеры
Расчёты носят справочный характер: коэффициенты взяты из официальных определений единиц, но округление при выводе может давать расхождение в последнем знаке. Откуда данные
Обновлено