Кодировщик URL
Преобразуйте текст в URL-безопасный формат, кодируя специальные символы.
Введите текст для кодирования:
Как пользоваться URL Encoder / Decoder
- 1
Введите текст или URL
Вставьте текст, который нужно закодировать, или URL-кодированную строку, которую нужно декодировать, в поле ввода.
- 2
Выберите кодирование или декодирование
Выберите «Кодировать», чтобы преобразовать текст в безопасный для URL формат, или «Декодировать», чтобы превратить percent-encoded текст обратно в обычный.
- 3
Запустите преобразование
Обработайте ввод, чтобы мгновенно преобразовать его в выбранном направлении.
- 4
Скопируйте результат
Скопируйте закодированный или декодированный вывод для использования в ссылках, строках запросов или запросах API.
Кодирование URL и процентное кодирование простыми словами
Что такое кодирование URL
Кодирование URL, точнее называемое процентным кодированием, — это механизм, позволяющий URL нести символы, которые он иначе не смог бы представить. URL ограничен небольшим набором символов ASCII, и несколько из этих символов имеют особое структурное значение. Процентное кодирование заменяет любой проблемный символ знаком процента, за которым следуют две шестнадцатеричные цифры значения его байта, поэтому пробел становится %20, а решётка становится %23.
Правила определены в RFC 3986, стандарте, регулирующем синтаксис URI. Цель проста: гарантировать, что значение, помещённое внутрь URL, передаётся и разбирается ровно так, как задумано, без того чтобы случайный символ был принят за разделитель или отброшен программами по пути.
Зарезервированные против незарезервированных символов
RFC 3986 делит символы на группы. Незарезервированный набор всегда безопасен и никогда не кодируется: буквы A-Z и a-z, цифры 0-9 и четыре знака — дефис (-), точка (.), подчёркивание (_) и тильда (~). Они проходят нетронутыми, потому что не несут структурного значения и законны везде в URL.
Зарезервированный набор — это пунктуация, разграничивающая части URL: общие разделители : / ? # [ ] @ и поддразделители ! $ и & ' ( ) * + , ; =. Эти символы законны как разделители, но когда они появляются внутри значения, а не как разделитель, их нужно закодировать процентным способом, чтобы парсер не прочёл их неверно. Например, амперсанд внутри значения запроса должен стать %26, иначе он был бы прочитан как начало нового параметра.
Байтовая основа UTF-8
Процентное кодирование работает с байтами, а не напрямую с символами, и современные URL используют UTF-8 как источник байтов. Символ ASCII — это один байт, поэтому закодированный символ ASCII — это одно процентное экранирование. Символ за пределами ASCII сначала выражается как его последовательность байтов UTF-8, а затем каждый байт кодируется процентным способом отдельно, давая по одному экранированию на байт.
Буква с диакритическим знаком é — стандартная иллюстрация. В UTF-8 это два байта 0xC3 и 0xA9, поэтому она кодируется процентным способом в %C3%A9 — два экранирования на один видимый символ. Знак евро, три байта в UTF-8, становится %E2%82%AC. Вот почему нелатинский текст так сильно разрастается при кодировании: каждый символ может превратиться в два, три или четыре процентных экранирования в зависимости от своей длины в UTF-8.
Разбор примера: кодирование значения поиска
Предположим, вы хотите поместить фразу "Q&A: cats + dogs" в строку запроса. Буквы, цифры и текст вокруг двоеточия остаются словами, но небезопасные и зарезервированные символы экранируются. Пробел становится %20, амперсанд становится %26, двоеточие становится %3A, а знак плюс становится %2B, потому что буквальный плюс иначе был бы прочитан как пробел в данных формы.
Результат — Q%26A%3A%20cats%20%2B%20dogs. Вставленный в ссылку как ?q=Q%26A%3A%20cats%20%2B%20dogs, сервер декодирует его обратно в точную исходную фразу. Обратите внимание, что каждый зарезервированный символ, который предназначался как данные, а не как разделитель, пришлось закодировать, чтобы он пережил путешествие.
Пробелы: %20 против знака плюс
У пробелов есть знаменитая особенность. В пути и большей части URL пробел кодируется как %20. Но в формате application/x-www-form-urlencoded, используемом при отправке HTML-форм и во многих строках запроса, пробел традиционно кодируется как знак плюс (+). Обе договорённости активно используются, что является частым источником путаницы.
Практическое следствие в том, что буквальный знак плюс в данных в стиле формы сам должен быть закодирован как %2B, чтобы его не приняли за пробел. При декодировании вам нужно знать, какая договорённость породила строку: плюс в значении формы означает пробел, тогда как плюс в других местах обычно означает буквальный плюс. Этот инструмент выполняет стандартное процентное кодирование, поэтому ваши значения чисто проходят туда и обратно.
Кодирование целого URL против одного значения
JavaScript предоставляет две функции, которые соответствуют двум разным задачам, и выбор не той — классическая ошибка. encodeURI предназначена для целого URL: она оставляет структурные символы : / ? # & = нетронутыми, чтобы URL продолжал работать, кодируя только явно недопустимые символы вроде пробелов. encodeURIComponent предназначена для одного фрагмента данных, такого как одно значение запроса или сегмент пути: она экранирует и зарезервированные разделители, чтобы встроенная косая черта или амперсанд не могли сломать окружающий URL.
Этот инструмент выполняет кодирование в стиле компонента — поведение encodeURIComponent — что является безопасным вариантом по умолчанию для вставки недоверенного значения между разделителями, которыми управляете вы: он экранирует и зарезервированные разделители, чтобы встроенная косая черта или амперсанд не могли сломать окружающий URL. Компромисс в том, что сюда не следует вставлять полный адрес, потому что он также экранирует структурные символы : / ? # & = и испортит ссылку. Чтобы закодировать целый URL, закодируйте каждое отдельное значение или сегмент пути, а затем соберите готовый адрес самостоятельно.
Ошибка двойного кодирования
Двойное кодирование — самая частая ошибка процентного кодирования. Оно происходит, когда уже закодированный текст кодируется во второй раз. Спусковой крючок — сам знак процента: процент является зарезервированным символом, поэтому его кодирование превращает %20 в %2520, потому что ведущий % становится %25, а 20 остаётся. Значение, закодированное дважды, покажет конечному пользователю буквальные escape-последовательности вроде %2520 вместо задуманного пробела.
Избегайте этого, кодируя ровно один раз, в момент построения URL, и никогда не прогоняя строку, которая уже содержит процентные экранирования, через кодировщик снова. Если вы видите %25, за которым следует то, что выглядит как ещё одно экранирование, вы почти наверняка смотрите на дважды закодированные данные, и исправление — декодировать их один лишний раз или убрать лишний шаг кодирования в вашем коде.
Где вы будете его использовать
Процентное кодирование есть везде, где значение путешествует внутри URL. Построение строк запроса для поиска и фильтров, создание ссылок, содержащих введённый пользователем текст, передача параметров в REST API, встраивание целей перенаправления внутрь параметра return_url и подписание запросов, которые должны совпадать байт в байт, — всё это зависит от правильного кодирования. Веб-серверы и фреймворки декодируют входящие URL автоматически, поэтому закодированную форму вы обычно производите, а не читаете.
Полезная привычка — кодировать каждый динамический фрагмент отдельно по мере сборки URL, а не кодировать готовую строку за один проход. Это сохраняет ваши разделители нетронутыми, делая при этом безопасным каждое значение, и обходит как недокодирование, которое ломает ссылки, так и двойное кодирование, которое их портит.
Часто задаваемые вопросы
Что на самом деле делает URL-кодирование?
Может ли этот инструмент и кодировать, и декодировать?
Обрабатывает ли он специальные символы и другие языки?
В чём разница между кодированием полного URL и отдельного значения?
Конфиденциальны ли мои данные и бесплатен ли инструмент?
Похожие инструменты
Продолжайте работу с этими удобными инструментами