URL-кодирование
Выделение - это закодированный процент байтов.
Бесплатный онлайн-инструмент для кодирования/декодирования URL. Поддерживает 4 режима encodeURIComponent/encodeURI/RFC 3986, подсветка закодированных символов в реальном времени, многострочный пакетный режим, Query Only для кодирования только значений параметров. Локальная обработка в браузере, нулевая загрузка данных.
Похожие
Что такое URL-кодирование?
URL-кодирование (процентное кодирование) — это процесс преобразования небезопасных символов в URL в формат %XX. URL могут содержать только небольшое подмножество ASCII-символов (буквы, цифры, -_.~), все остальные символы (включая китайский язык, пробелы, специальные символы) должны быть закодированы перед передачей в URL. Например, пробел кодируется как %20, китайский иероглиф «中» — как %E4%B8%AD.
**encodeURIComponent vs encodeURI**: Это две наиболее часто используемые функции кодирования. encodeURIComponent кодирует наиболее тщательно, включая разделители параметров, такие как &, =, ?, поэтому подходит для кодирования отдельных значений параметров. encodeURI сохраняет структуру URL (схема://, путь, /, ?, #), поэтому подходит для кодирования полных URL. Неправильное использование приводит к ошибкам парсинга параметров.
**RFC 3986 vs старые стандарты**: RFC 3986 рассматривает тильду ~ как безопасный символ, не требующий кодирования, в то время как ранние стандарты кодируют её как %7E. Использование RFC 3986 уменьшает ненужные экранирования, улучшает читаемость URL и позволяет избежать проблем с парсингом %7E на некоторых серверах.
**Режим Query Only**: Используется, когда вам нужно закодировать только значения параметров запроса в URL, не затрагивая имена ключей, знаки равенства и символы &. Например, ?name=张三 кодируется как ?name=%E5%BC%A0%E4%B8%89, сохраняя имена ключей читаемыми и кодируя только значения.
**Подсветка кодирования**: Подсвечивает в реальном времени символы в формате %XX янтарным цветом, чтобы пользователи сразу видели, какие символы были закодированы. Это помогает понять правила кодирования: буквы и цифры обычно являются безопасными символами, которые не кодируются, только китайский язык и специальные символы кодируются. Все вычисления выполняются локально в браузере, данные не загружаются.
Варианты использования
- Отладка параметров API: сравнение вывода encodeURIComponent и encodeURI для решения проблем несоответствия подписи интерфейса
- Декодирование логов: пакетное декодирование URL-закодированного содержимого в логах для восстановления читаемого текста
- Построение URL: режим Query Only сохраняет имена ключей и кодирует только значения, избегая ошибок формата при ручной конкатенации
- Фронтенд-разработка: подсветка помогает понять, какие символы экранируются, полезно для отладки перенаправлений страниц
- Миграция данных: пакетная обработка URL-закодированных данных, экспортированных из устаревших систем, для преобразования в новый формат
Как использовать
- Введите или вставьте URL или текст для кодирования/декодирования
- Выберите направление кодирования (Кодировать/Декодировать) и режим (Component / URI / full / RFC 3986)
- Включите пакетный режим для многострочных данных или Query Only для кодирования только значений параметров
- Проверьте подсвеченный результат и скопируйте закодированную строку для использования в API-запросах или построении URL
Функции
- Четыре режима кодирования: переключение между encodeURIComponent / encodeURI / full / RFC 3986 одним кликом, сравнение различий вывода в реальном времени
- Подсветка кодирования: подсвечивает экранированные %XX-символы в реальном времени, янтарная маркировка делает результаты кодирования видимыми с первого взгляда
- Пакетный режим: поддержка многострочного пакетного кодирования/декодирования, каждая строка обрабатывается независимо, идеально для логов или массовых данных
- Режим Query Only: кодирует только часть значения параметра URL (после знака равенства), сохраняя имена ключей, символы и структуру пути нетронутыми
- Дебаунс в реальном времени: автоматическое кодирование/декодирование за 300 мс, не нужно нажимать кнопки, результаты появляются при вводе
- Подсчёт символов: отображает количество введённых символов в реальном времени, удобно для проверки ограничений длины параметров API
Примеры кода
Кодирование/Декодирование URL в JavaScript
// encodeURIComponent: кодирует отдельные значения параметров (наиболее частое использование)
const param = encodeURIComponent('张三&李四');
console.log(param); // %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B
// encodeURI: кодирует полный URL (сохраняет структурные символы :/?#&=)
const url = encodeURI('https://example.com/search?q=привет мир');
console.log(url);
// Декодирование
const decoded = decodeURIComponent(param);
console.log(decoded); // 张三&李四
// Совместимость с RFC 3986 (~ не кодируется)
function rfc3986Encode(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase());
}
// API URLSearchParams (современный способ, автоматическая кодировка)
const params = new URLSearchParams({ name: '张三', city: '北京' });
console.log(params.toString());
// name=%E5%BC%A0%E4%B8%89&city=%E5%8C%97%E4%BA%ACКодирование/Декодирование URL в Python
from urllib.parse import quote, unquote, urlencode, quote_plus
# quote: аналогично encodeURIComponent
encoded = quote('张三&李四')
print(encoded) # %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B
# Режим RFC 3986 (~ не кодируется, по умолчанию)
print(quote('hello~world')) # hello~world
# quote_plus: пробелы кодируются как + (формат формы)
print(quote_plus('hello world')) # hello+world
# Декодирование
print(unquote(encoded)) # 张三&李四
# urlencode: построение строки запроса
params = urlencode({'name': '张三', 'city': '北京'})
print(params)
# name=%E5%BC%A0%E4%B8%89&city=%E5%8C%97%E4%BA%ACКодирование/Декодирование URL в Java
import java.net.URLEncoder;
import java.net.URLDecoder;
import java.net.URI;
import java.nio.charset.StandardCharsets;
public class URLEncodeExample {
public static void main(String[] args) throws Exception {
// URL-кодирование (URLEncoder - формат формы, пробелы становятся +)
String encoded = URLEncoder.encode("张三&李四", "UTF-8");
System.out.println(encoded);
// %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B
// Декодирование
String decoded = URLDecoder.decode(encoded, "UTF-8");
System.out.println(decoded); // 张三&李四
// Построение полного URL (класс URI обрабатывает кодирование автоматически)
URI uri = new URI("https", "example.com", "/search", "q=привет", null);
System.out.println(uri.toASCIIString());
}
}Часто задаваемые вопросы
В чём разница между encodeURIComponent и encodeURI?
encodeURIComponent кодирует все небезопасные символы, включая &, =, ? и т.д., поэтому подходит для кодирования отдельных значений параметров. encodeURI сохраняет структурные символы URL (:, /, ?, # и т.д.), поэтому подходит для кодирования полных URL. Сценарий использования: Component для значений параметров, URI для полных URL.
В чём разница между RFC 3986 и стандартным кодированием?
RFC 3986 — это обновлённая версия стандарта URL, которая рассматривает тильду ~ как безопасный символ, не требующий кодирования, в то время как старые стандарты кодируют её как %7E. Использование RFC 3986 позволяет избежать различий в парсинге на некоторых серверах и обеспечивает лучшую совместимость.
В каких сценариях используется режим Query Only?
Используется, когда у вас есть строка запроса URL вида ?name=张三&city=北京 и вы хотите закодировать только значения параметров, не затрагивая имена ключей и символы. В этом случае name и city остаются неизменными, а значения кодируются как %E5%BC%A0%E4%B8%89 и %E5%8C%97%E4%BA%AC.
Пробелы должны кодироваться как + или как %20?
В формате application/x-www-form-urlencoded (отправка HTML-форм) пробелы кодируются как +. Но в путях URL и в encodeURIComponent пробелы всегда кодируются как %20. Этот инструмент по умолчанию использует формат %20.
Почему разные инструменты дают разные результаты для одного и того же китайского иероглифа?
Это зависит от метода кодировки символов. Этот инструмент использует кодировку UTF-8 (веб-стандарт), китайский иероглиф «中» кодируется как %E4%B8%AD. Если другие инструменты используют кодировку GBK, результат будет %D6%D0. Рекомендуется всегда использовать UTF-8 для веб-URL.
Для чего нужна подсветка кодирования?
Подсвечивает символы, закодированные в формате %XX (например, пробел→%20), помогая понять правила кодирования и решать проблемы. Буквы и цифры — безопасные символы, которые не кодируются, только китайский язык и специальные символы кодируются.
Нужно ли кодировать сам символ %?
Да. % — это начальный символ экранирования в URL-кодировании. Если буквальный % появляется в значении параметра, он должен быть закодирован как %25; в противном случае он будет ошибочно интерпретирован как префикс кодировки, что вызовет ошибки парсинга. Например, 100% должно быть закодировано как 100%25.
Глоссарий
- Процентное кодирование (Percent-encoding)
- Официальное название URL-кодирования, метод кодирования, представляющий символы с помощью % с последующими двумя шестнадцатеричными цифрами. Например, пробел кодируется как %20, китайский иероглиф «中» — как %E4%B8%AD.Википедия - Процентное кодирование
- encodeURIComponent
- Встроенная функция JavaScript, которая кодирует все символы, кроме A-Z a-z 0-9 - _ . ! ~ * ' ( ). Наиболее часто используется для кодирования отдельных значений параметров запроса URL.
- encodeURI
- Встроенная функция JavaScript, которая сохраняет структурные символы URL (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) и кодирует только те символы, которые действительно нуждаются в кодировании. Используется для кодирования полных URL.
- RFC 3986
- Последний стандарт IETF для общего синтаксиса URI (2005 год), определяющий правила URL-кодирования и классифицирующий тильду ~ как незарезервированный символ (не требующий кодирования). Заменяет старые RFC 2396 и RFC 1738.RFC 3986
- Зарезервированные символы (Reserved Characters)
- Символы с особым значением в URL, такие как : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Эти символы должны кодироваться при использовании в качестве данных, но не в их структурных позициях.
- Незарезервированные символы (Unreserved Characters)
- Безопасные символы, которые можно использовать в любой позиции URL без кодирования, включая A-Z, a-z, 0-9, -, _, ., ~ (согласно RFC 3986).
- Строка запроса (Query String)
- Часть URL после ?, состоящая из пар key=value, разделённых &. Например, в ?name=张三&age=20 name=张三 и age=20 — это два параметра.
- URLSearchParams
- API, предоставляемый современными браузерами для удобного построения и анализа строк запроса URL с автоматической обработкой кодирования и декодирования. Более безопасный и надёжный, чем ручная конкатенация строк.
- application/x-www-form-urlencoded
- Формат отправки по умолчанию для HTML-форм, где пробелы кодируются как + вместо %20, что немного отличается от encodeURIComponent. Серверные фреймворки обычно автоматически обрабатывают оба формата.
- Кодировка UTF-8
- Стандартная кодировка символов Веба. При URL-кодировании не-ASCII символы (такие как китайский, эмодзи) сначала преобразуются в последовательности байтов UTF-8, затем каждый байт кодируется в формате %XX.
Сравнение экранирования символов в 4 режимах кодирования
| Символ | Значение | encodeURIComponent | encodeURI | RFC 3986 |
|---|---|---|---|---|
Пробел | Пробел | %20 | %20 | %20 |
! | Восклицательный знак | %21 | ! | %21 |
# | Идентификатор фрагмента | %23 | # | %23 |
$ | Знак доллара | %24 | $ | %24 |
& | Разделитель параметров | %26 | & | %26 |
' | Одинарная кавычка | %27 | ' | %27 |
( | Левая скобка | %28 | ( | %28 |
) | Правая скобка | %29 | ) | %29 |
* | Звёздочка | %2A | * | %2A |
+ | Знак плюс | %2B | + | %2B |
, | Запятая | %2C | , | %2C |
/ | Разделитель пути | %2F | / | %2F |
: | Двоеточие | %3A | : | %3A |
; | Точка с запятой | %3B | ; | %3B |
= | Знак равенства | %3D | = | %3D |
? | Строка запроса | %3F | ? | %3F |
@ | Собака | %40 | @ | %40 |
~ | Тильда | %7E | %7E | ~ |
Краткий справочник распространённых зарезервированных символов URL
| Закодировано | Исходный символ | Использование в URL |
|---|---|---|
%20 | (пробел) | Пробел |
%21 | ! | Подразделитель |
%23 | # | Идентификатор фрагмента (хеш) |
%25 | % | Сам экранирующий символ |
%26 | & | Разделитель параметров запроса |
%2B | + | Знак плюс / пробел в форме |
%2F | / | Разделитель пути |
%3A | : | Разделитель схемы |
%3D | = | Разделитель ключ-значение |
%3F | ? | Начало строки запроса |
%40 | @ | Разделитель аутентификации/email |
%5B | [ | Параметр массива (RFC 3986) |
Authoritative References
- Безопасное сравнение строк
- Двоичное Кодирование
- Шифр Цезаря
- Азбука Морзе
- Hex Кодирование
- Видео в Base64
- Base64 в видео
- Изображение в Base64
- Base64 в изображение
- Текст в Base64
- Base64 в текст
- Проверка хеша файла
- Файл в Base64
- Base64 в Файл
- Аудио в Base64
- Base64 в Аудио
- AES-шифрование и расшифровка
- DES Шифрование
- Кодировщик и Декодер Base32
- Base58 кодирование и декодирование
- Кодирование Base64
- Декодирование Base64
- Сравнение Base64
- Разбиение Base64
- Base64 — объединение строк
- Форматирование Base64
- Валидация Base64
- Пакетное кодирование Base64
- Пакетное декодирование Base64
- Очистка Base64
- Обработка заполнения Base64
- Base64 в Hex
- Преобразователь Base64 DataURL
- Base64-Hex конвертер
- Base85 Кодирование
- Генератор и верификатор HMAC
- PBKDF2
- Хеш MD5
- SHA-256 хэш
- SHA1 хеш
- Хеш SHA512
- JWT
- HTML Кодирование
- Unicode экранирование
- URL-кодирование
- Base64 URL-Safe
- MIME Base64
- Обфускация Java
- Обфускация JS
- Обфускация PHP
- Обфускация Python
- Статистика длины Base64