Skip to content

URL кодировщик и декодер с парсером URL

Декодирование и кодирование URL в реальном времени со встроенным парсером URL. Два режима: encodeURI и encodeURIComponent. 100% приватно, данные не отправляются на сервер.

Без отслеживания Работает в браузере Бесплатно
Декодированный
Закодированный
Проверено на соответствие RFC 3986, корректность encodeURI/encodeURIComponent и точность UTF-8 кодирования — Команда инженеров Go-Tools · Apr 7, 2026

Что такое URL-кодирование (percent encoding)?

URL-кодирование, формально percent encoding — механизм, определённый в RFC 3986, для представления символов в URI, которые не разрешены или имеют особое значение. Каждый небезопасный байт преобразуется в % + два hex-символа: пробел → %20, амперсанд → %26, китайский символ 中 → %E4%B8%AD (его три UTF-8 байта, каждый percent-кодирован).

URL могут содержать только ограниченный набор ASCII. Буквы, цифры и горстка символов (- _ . ~) — «незарезервированные» и могут появляться как есть. Все остальные — пробелы, пунктуация и весь Unicode — должны percent-кодироваться. Зарезервированные символы вроде ?, &, =, # служат структурными разделителями в синтаксисе URL и должны кодироваться, когда используются как литеральные данные.

Percent encoding критически важен в вебе: браузеры кодируют отправку форм, API требуют закодированных параметров запроса, OAuth-флоу зависят от корректно закодированных redirect URI, а интернационализированные доменные имена опираются на кодирование не-ASCII символов. Ошибки кодирования ведут к битым ссылкам, уязвимостям (открытые редиректы) и порче данных.

Инструмент даёт оба режима encodeURI и encodeURIComponent, встроенный парсер структуры URL, конвертацию в реальном времени и обнаружение двойного кодирования — всё приватно в браузере.

URL-кодирование часто применяется вместе с другими инструментами. Может потребоваться Base64-кодировать URL для встраивания в JWT-токен или payload API, или отформатировать JSON с URL-строками. Подробный байтовый разбор percent encoding — в статье «Полное руководство по URL-кодированию».

Кодируете URL для QR-кода? Используйте генератор QR-кодов — длинные URL могут превышать байтовый лимит QR.

// Encode a query parameter value
const param = encodeURIComponent('hello world & goodbye');
console.log(param); // → 'hello%20world%20%26%20goodbye'

// Encode a full URL (preserves structure)
const url = encodeURI('https://example.com/path name?q=hello world');
console.log(url); // → 'https://example.com/path%20name?q=hello%20world'

// Decode a percent-encoded string
const decoded = decodeURIComponent('hello%20world%20%26%20goodbye');
console.log(decoded); // → 'hello world & goodbye'

// Build a URL with encoded parameters
const base = 'https://api.example.com/search';
const query = `?q=${encodeURIComponent('你好')}&lang=zh`;
console.log(base + query); // → 'https://api.example.com/search?q=%E4%BD%A0%E5%A5%BD&lang=zh'

Ключевые возможности

Два режима кодирования

Переключайте между encodeURI (сохраняет структуру URL) и encodeURIComponent (кодирует всё для значений параметров) под ваш сценарий.

Встроенный парсер URL

Автоматически разбивает URL на протокол, хост, порт, путь, параметры запроса и fragment — каждое поле редактируемое и можно собрать обратно.

Преобразование в реальном времени

Кодирование и декодирование мгновенно по мере ввода — кнопок жать не нужно.

Полностью в браузере

Вся обработка локальная через нативные API JavaScript. Данные не покидают устройство — нет загрузок на сервер, нет трекинга.

Полная поддержка UTF-8

Корректно обрабатывает китайский, японский, корейский, арабский, эмодзи и любой Unicode-текст через корректное UTF-8 byte-кодирование.

Обнаружение двойного кодирования

Автоматически обнаруживает и предупреждает о двойном кодировании вроде %2520, помогая избежать одной из самых частых ошибок URL.

Примеры

Декодирование искажённого URL

https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dhello%20world%26lang%3Den
https://example.com/search?q=hello world&lang=en

Полностью percent-кодированный URL декодируется в человекочитаемую форму, раскрывая параметры запроса и структуру

Китайские символы

https://example.com/search?q=你好世界
https://example.com/search?q=%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C

Китайские символы конвертируются в UTF-8 байты и percent-кодируются

Параметры запроса

https://example.com/api?name=John Doe&role=admin&lang=en&sort=date desc
https://example.com/api?name=John%20Doe&role=admin&lang=en&sort=date%20desc

Пробелы и спецсимволы в значениях параметров запроса кодируются с сохранением структуры URL

Полный URL

https://user:pass@example.com:8080/path/to/page?key=value&arr[]=1#section-2
https://user:pass@example.com:8080/path/to/page?key=value&arr%5B%5D=1#section-2

Полный URL с учётными данными, портом, путём, параметрами запроса со скобками и fragment-идентификатором

OAuth Redirect URI

https://auth.example.com/authorize?redirect_uri=https://myapp.com/callback?code=abc&state=xyz
https://auth.example.com/authorize?redirect_uri=https%3A%2F%2Fmyapp.com%2Fcallback%3Fcode%3Dabc%26state%3Dxyz

Значение redirect_uri само содержит полный URL, который должен быть закодирован, чтобы спецсимволы не интерпретировались как часть внешнего URL

Как использовать

  1. 1

    Введите URL или закодированную строку

    Вставьте URL в область декодированного для кодирования или percent-кодированную строку в область кодированного для декодирования. Выберите режим encodeURI или encodeURIComponent.

  2. 2

    Смотрите результат и разобранную структуру

    Другая область обновляется мгновенно. Парсер URL разбивает URL на протокол, хост, порт, путь, параметры запроса и fragment — все редактируемые.

  3. 3

    Скопируйте или перестройте

    Нажмите «Скопировать» для результата. Редактируйте отдельные компоненты URL и нажмите «Перестроить», чтобы собрать новый URL из изменённых частей.

Типичные ошибки

Двойное кодирование (%2520 вместо %20)

Двойное кодирование возникает, когда уже закодированный URL кодируется снова. Знак % в %20 кодируется как %25, превращая %20 в %2520. Это ломает URL, потому что сервер видит литеральную строку %20 вместо пробела.

✗ Неверно
https://example.com/path%2520with%2520spaces
✓ Верно
https://example.com/path%20with%20spaces

Пробел как + в сегментах пути

Символ + представляет пробел только в формате application/x-www-form-urlencoded (query string из HTML-форм). В сегментах пути + интерпретируется как литеральный плюс, не пробел. Всегда используйте %20 для пробелов в сегментах пути.

✗ Неверно
https://example.com/my+file+name.pdf
✓ Верно
https://example.com/my%20file%20name.pdf

encodeURI на значениях параметров

encodeURI() не кодирует &, = и другие зарезервированные символы, поэтому применение к значению параметра с этими символами портит структуру query string.

✗ Неверно
encodeURI('key=value&more')  → 'key=value&more' (& not encoded!)
✓ Верно
encodeURIComponent('key=value&more')  → 'key%3Dvalue%26more'

Предположение о не-UTF-8 кодировке

Некоторые legacy-системы используют Latin-1 или Shift-JIS для URL-параметров. Современные стандарты требуют UTF-8. Декодирование Shift-JIS-параметра как UTF-8 даёт повреждённый текст.

✗ Неверно
Decoding %82%B1%82%F1 as UTF-8 (this is Shift-JIS for こん)
✓ Верно
Using UTF-8: %E3%81%93%E3%82%93 correctly decodes to こん

Кодирование относительных путей без контекста

Кодирование пути вроде ../images/photo.jpg через encodeURIComponent превращает слэши и точки в percent-последовательности, ломая структуру пути. Используйте encodeURI() или кодируйте только отдельные сегменты.

✗ Неверно
encodeURIComponent('../images/photo.jpg')  → '..%2Fimages%2Fphoto.jpg'
✓ Верно
Encode each segment: '../images/' + encodeURIComponent('my photo.jpg')

Типичные сценарии

Отладка искажённых URL
Декодирование percent-кодированных URL из логов сервера, сообщений об ошибках или DevTools для чтения исходного человекочитаемого текста.
Разработка API
Кодирование значений параметров запроса для REST API, чтобы спецсимволы вроде &, = и пробелы не ломали URL запроса.
Настройка OAuth-флоу
Корректное кодирование redirect_uri и других URL-параметров в OAuth authorization URL для предотвращения сбоев аутентификации.
Интернационализированные URL
Кодирование и декодирование URL с китайскими, японскими, корейскими, арабскими и другими не-ASCII символами для интернационализированных приложений.
Анализ маркетинговых ссылок
Декодирование tracking-URL из email-кампаний и рекламных платформ для понимания встроенных UTM-параметров и цепочек редиректов.
Проверка структуры URL
Разбор сложных URL на компоненты — протокол, хост, порт, путь, параметры запроса и fragment — для анализа и модификации.

Технические детали

RFC 3986 — зарезервированные и незарезервированные символы
RFC 3986 определяет незарезервированные символы (A-Z, a-z, 0-9, -, ., _, ~), не нуждающиеся в кодировании, и зарезервированные (:, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ;, =), служащие разделителями URI и требующие percent-кодирования при использовании как данных.
Поток UTF-8 byte-кодирования
Не-ASCII символы сначала конвертируются в Unicode код-поинт, затем в UTF-8 байты (1-4 байта в зависимости от диапазона), наконец каждый байт percent-кодируется как %XX. Например: é (U+00E9) → UTF-8 байты C3 A9 → %C3%A9. Эмодзи 🎉 (U+1F389) → UTF-8 байты F0 9F 8E 89 → %F0%9F%8E%89.
URL и URI
URI (Uniform Resource Identifier) — общий термин для любой идентифицирующей строки. URL (Uniform Resource Locator) — это URI, также указывающий механизм доступа (вроде https://). Правила кодирования RFC 3986 применимы ко всем URI. JavaScript API использует терминологию URI (encodeURI, decodeURI), повседневное использование — URL.

Лучшие практики

Правильный режим под задачу
Используйте encodeURIComponent() для отдельных ключей и значений параметров. encodeURI() — только для полного URL, когда нужно закодировать небезопасные символы без поломки структуры. Никогда не применяйте encodeURI() к значениям параметров, которые могут содержать &, = или другие зарезервированные.
Избегайте двойного кодирования
Перед кодированием проверяйте, не закодирована ли строка уже. Ищите существующие %-последовательности. Кодирование уже закодированной строки превращает %20 в %2520, %3D в %253D и т. д. Если не уверены — сначала декодируйте, потом кодируйте один раз.
Декодируйте на сервере
Большинство веб-фреймворков автоматически декодируют URL-параметры до того, как они попадают в код приложения. Избегайте ручного декодирования параметров, которые фреймворк уже декодировал — это может вызвать проблемы, если оригинал содержал литеральные percent-последовательности.
Кодируйте значения для OAuth и подписей API
OAuth 1.0 signature base strings и многие алгоритмы подписи API требуют строгого percent-кодирования по RFC 3986. Используйте encodeURIComponent() и затем замените оставшиеся символы, которые он не кодирует (!, ', (, ), *), на их percent-эквиваленты, если этого требует спецификация.

Часто задаваемые вопросы

Что такое URL-кодирование и зачем оно нужно?
URL-кодирование (percent encoding) преобразует небезопасные символы в %XX hex-последовательности, чтобы их можно было безопасно включать в URL. Символы вроде пробелов, амперсандов и не-ASCII текста должны кодироваться, иначе они нарушают структуру URL или неверно интерпретируются. Определено в RFC 3986. URL могут содержать только ограниченный набор US-ASCII — буквы (A-Z, a-z), цифры (0-9) и несколько символов (- _ . ~). Любой символ вне этого набора кодируется как % + два hex-символа байта. Например, пробел становится %20, слэш — %2F, амперсанд — %26. Символы &, =, ?, # имеют структурное значение в URL — без кодирования литеральный & в значении параметра был бы интерпретирован как разделитель параметров, ломая URL.
В чём разница между encodeURI и encodeURIComponent?
encodeURI() кодирует полный URL, сохраняя структурные символы вроде :, /, ?, #. encodeURIComponent() кодирует всё, кроме букв, цифр и - _ . ~ — это правильный выбор для значений отдельных параметров запроса. Используйте encodeURIComponent() для ключей и значений, а encodeURI() — только для полных URL. encodeURI('https://example.com/path name') даёт 'https://example.com/path%20name', сохраняя :// и /. encodeURIComponent() гораздо агрессивнее — кодирует :, /, ?, #, &, =. Если применить encodeURI() к значению параметра с амперсандом, & пройдёт без кодирования и будет принят за разделитель параметров. Путать их — одна из самых частых причин URL-багов.
URL-кодирование — это то же, что HTML-кодирование?
Нет. URL-кодирование преобразует символы в %XX (RFC 3986), HTML-кодирование — в сущности вроде & и <. Разные цели, никогда не смешивайте. URL-кодирование — для передачи данных в URL: пробел → %20. HTML-кодирование — для безопасного отображения в HTML: амперсанд → &. Частая ошибка — применять HTML-кодирование к URL-параметрам или наоборот.
Почему мой URL ломается в curl?
Shell интерпретирует спецсимволы URL до того, как они дойдут до curl: & запускает команды в фоне, ? запускает globbing, # начинает комментарий. Решение — обернуть URL в одинарные кавычки: curl 'https://example.com/api?key=value&page=2#section'. Одинарные кавычки предотвращают интерпретацию shell. Амперсанд (&) — самая частая причина: он запускает предыдущую команду в фоне, разрезая URL по первому & и отбрасывая остальное.
Почему китайские символы становятся строками вроде %E4%B8%AD?
Китайские символы сначала конвертируются в UTF-8 байты, затем каждый байт percent-кодируется как %XX. Символ 中 (U+4E2D) становится тремя UTF-8 байтами (E4, B8, AD), давая %E4%B8%AD — поэтому один китайский символ расширяется до 9 символов в URL. Этот трёхшаговый процесс — символ → Unicode код-поинт → UTF-8 байты → percent-hex — применим ко всем не-ASCII символам. Эмодзи часто требуют 4 UTF-8 байта и расширяются до 12 символов.
Нужно ли кодировать параметр redirect_uri в OAuth?
Да, всегда кодируйте через encodeURIComponent(). redirect_uri — это полный URL внутри значения параметра запроса, поэтому его спецсимволы (?, &, =) должны быть закодированы, чтобы не быть приняты за часть внешнего URL. Без кодирования redirect_uri=https://myapp.com/callback?code=abc&state=xyz сервер увидит redirect_uri как только https://myapp.com/callback?code=abc, а state=xyz будет разобран как отдельный параметр внешнего URL. Правильно: redirect_uri=https%3A%2F%2Fmyapp.com%2Fcallback%3Fcode%3Dabc%26state%3Dxyz.
В чём разница между querystring Node.js и URLSearchParams?
Используйте URLSearchParams для новых проектов — это стандарт WHATWG, совпадает с поведением браузеров и работает идентично в Node.js и браузерах. Модуль querystring устарел. Ключевые отличия: URLSearchParams кодирует пробелы как + (стандарт form encoding), обрабатывает повторяющиеся ключи через getAll() и предоставляет итерируемый интерфейс с entries(), keys(), values(). querystring кодирует пробелы как %20 и имеет особенности с массивами.
Как кодировать URL в Python, JavaScript и Java?
JavaScript: encodeURIComponent('hello world') → 'hello%20world'. Python: urllib.parse.quote('hello world') → 'hello%20world'. Java: URLEncoder.encode('hello world', StandardCharsets.UTF_8) → 'hello+world' (замените + на %20 для RFC 3986). В JavaScript используйте encodeURIComponent() для значений параметров и encodeURI() для полных URL. В Python 3: urllib.parse.quote() для сегментов пути и urllib.parse.urlencode() для параметров запроса. В Java учтите, что URLEncoder использует form encoding (пробелы как +).
Какие символы не кодируются?
RFC 3986 определяет 66 «незарезервированных» символов, которые никогда не нуждаются в кодировании: A-Z, a-z, 0-9, дефис (-), точка (.), подчёркивание (_) и тильда (~). Они могут литерально появляться в любой части URL. Зарезервированные — :, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ;, = — допустимы в структурных ролях, но должны кодироваться при использовании как литеральные данные. encodeURIComponent() кодирует всё, кроме A-Z a-z 0-9 - _ . ~ ! ' ( ) *, encodeURI() дополнительно сохраняет зарезервированные.
В чём разница между + и %20 для кодирования пробелов?
Оба представляют пробел, но %20 — универсально безопасный выбор. Конвенция «+» из HTML form encoding (application/x-www-form-urlencoded) и работает только в query-строке. В сегментах пути «+» — литеральный плюс, не пробел. Если сомневаетесь — используйте %20.
Как URL-кодирование обрабатывает эмодзи?
Один эмодзи обычно расширяется до 12 символов в URL. Эмодзи конвертируются в UTF-8 байты (обычно 4 байта), затем каждый байт кодируется как %XX. Например, 🚀 (U+1F680) → %F0%9F%9A%80. Большинство эмодзи используют код-поинты в диапазоне U+1F000 — U+1FFFF, требующие 4 UTF-8 байт. Эмодзи с модификаторами тона кожи или ZWJ-последовательностями — несколько код-поинтов и могут расширяться до 30+ символов. Кодирование полностью обратимо.
Можно ли использовать URL-кодирование для шифрования или безопасности?
Нет. URL-кодирование — не шифрование и не даёт никакой безопасности. Это полностью обратимое детерминированное преобразование — любой может декодировать строку мгновенно без ключа. Оно существует только для экранирования спецсимволов. Считать URL-кодирование обфускацией или безопасностью — опасное заблуждение. Чувствительные данные защищаются HTTPS (TLS-шифрование запроса), не URL-кодированием. Кроме того, URL часто появляются в логах сервера, истории браузера и заголовках Referrer.
Каков максимальный размер URL?
Официального максимума нет, но держите URL до 2000 символов для максимальной совместимости. Большинство браузеров поддерживают ~2048, Apache по умолчанию 8190 байт, Nginx — 8192. Для больших данных используйте POST. Спецификации HTTP не определяют максимальную длину URL, но практические лимиты есть на каждом слое. Chrome и Firefox обрабатывают URL >100 000 символов, IIS ограничивает query string до 16 384 байт.
В чём разница между URL и URI?
URI (Uniform Resource Identifier) — любая строка, идентифицирующая ресурс. URL (Uniform Resource Locator) — это URI, также указывающий, как обратиться через протокол вроде https://. Все URL — URI, но не все URI — URL: например, URN вроде urn:isbn:0451450523 идентифицирует книгу по ISBN, но не говорит, где её найти. В повседневной веб-разработке термины часто используются как синонимы. Правила кодирования RFC 3986 применимы к обоим.

Похожие инструменты

Все инструменты →

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

Кодирование и форматирование

Декодирование и кодирование Base64 онлайн бесплатно. Преобразование в реальном времени с полной поддержкой UTF-8 и эмодзи. Полная приватность — работает в браузере. Без регистрации.

JSON Diff и сравнение

Кодирование и форматирование

Сравнивайте два JSON-файла мгновенно в браузере. Side-by-side подсветка, вывод JSON Patch (RFC 6902), игнорирование шума вроде timestamp и ID. 100% приватно, без загрузки.

Форматировщик и валидатор JSON

Кодирование и форматирование

Форматирование, проверка и улучшение читаемости JSON прямо в браузере. Бесплатный онлайн-инструмент с проверкой синтаксиса, поиском ошибок, минификацией и копированием в один клик. Полная приватность.

Конвертер JSON в YAML

Кодирование и форматирование

Вставьте JSON, получите YAML мгновенно. Live-конвертация в браузере. Готово для K8s/Compose, отступ 2/4 пробела, умное экранирование. 100% приватно, без загрузки.

Генератор QR-кодов — URL, WiFi, vCard, Email, SMS, Geo

Кодирование и форматирование

Бесплатный генератор QR-кодов. Создавайте статические QR для URL, WiFi, vCard, email и SMS. Скачивание SVG и PNG. Без срока действия, без регистрации, 100% в браузере.

Конвертер YAML в JSON

Кодирование и форматирование

Вставьте YAML, получите JSON мгновенно. Live-конвертация в браузере. Поддержка манифестов K8s, OpenAPI, helm values. 100% приватно, без загрузки.