Стандарт RFC 3986: зарезервированные символы и Percent-Encoding
Интернет-ссылки строятся на строгих правилах спецификации RFC 3986 (Uniform Resource Identifier). В этой статье подробно разбираем механизм процентильного кодирования (Percent-Encoding), почему русские буквы превращаются в конструкции вида %D0%BF, а также нюансы между encodeURI и encodeURIComponent в JavaScript.
Анатомия URL и исторические ограничения ASCII
1. Не зарезервированные (Unreserved): латинские буквы
A-Z, a-z, цифры 0-9, и 4 спецсимвола: дефис -, подчёркивание _, точка ., тильда ~. Они никогда не требуют кодирования;2. Зарезервированные (Reserved): символы, имеющие специальное синтаксическое значение в структуре URI:
:, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ;, =.Любые символы за пределами таблицы US-ASCII (включая все буквы кириллицы) не могут быть переданы в чистом виде по стандарту HTTP и обязаны преобразовываться в шестнадцатеричные процентильные коды.
Полезный инструмент: Для экранирования параметров веб-адресов применяйте инструмент URL Encode / Decode.
Полезный инструмент: Для кириллических ссылок также полезна транслитерация текста онлайн.
Полезный инструмент: При создании компактных ссылок для штрихкодов используйте генератор QR-кодов.
Механизм кодирования кириллицы (UTF-8 в Percent-Encoding)
1. Буква «П» в таблице Юникода имеет номер U+041F;
2. В кодировке UTF-8 она представляется двумя байтами:
0xD0 и 0x9F;3. Перед каждым шестнадцатеричным байтом добавляется знак процента
%:Буква «П» ->
%D0%9F.4. Буква «п» (строчная) в UTF-8 состоит из байтов
0xD0 и 0xBF -> %D0%BF.Именно поэтому одно русское слово из 6 букв («привет») при кодировании превращается в последовательность из 36 ASCII-символов:
%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82. Разница между encodeURI и encodeURIComponent в JavaScript
• encodeURI(uri): предназначена для кодирования законченного URL-адреса. Она не кодирует зарезервированные разделители протокола и структуры:
;,/?:@&=+$#. Используется, когда нужно передать полный адрес со схемой и доменом;• encodeURIComponent(str): кодирует абсолютно всё, включая
/, ?, & и =. Она предназначена исключительно для значений query-параметров внутри строки запроса.Опасная ошибка: если применить
encodeURIComponent ко всей ссылке https://site.ru/?q=1, двоеточие и слэши превратятся в %3A%2F%2F, и браузер не сможет открыть такой адрес. Попробуйте онлайн-инструменты по этой теме
Используйте бесплатные утилиты Utilora прямо в браузере без регистрации:
URL Encode / Decode
Кодирование и декодирование URL с кириллицей и спецсимволами (RFC 3986), а также парсер UTM-меток в интерактивную таблицу.
Запустить ▸Base64 Кодер / Декодер
Кодирование текста и файлов в Base64 и обратное декодирование с корректной поддержкой UTF-8 кириллицы.
Запустить ▸JSON Formatter
Форматирование с отступами в 2 или 4 пробела, сжатие и перевод JSON в одну строку (Minify), валидация синтаксиса.
Запустить ▸Часто задаваемые вопросы (FAQ)
В спецификации RFC 3986 пробел строго кодируется как %20. Знак плюса «+» для пробела исторически используется только в теле форм application/x-www-form-urlencoded при отправке POST-запросов.
Символ процента «%» сам по себе закодируется в «%25». В результате строка %D0%BF превратится в %25D0%25BF, что приведёт к искажению данных в базе.
Воспользуйтесь инструментом «URL Encode / Decode» на Utilora.ru: мгновенная расшифровка процентов, разбор UTM-меток и таблица параметров.