logo
GeekFormat

URL-кодирование

Код кодирования
URL вход
0 chars

Бесплатный онлайн-инструмент для кодирования/декодирования URL. Поддерживает 4 режима encodeURIComponent/encodeURI/RFC 3986, подсветка закодированных символов в реальном времени, многострочный пакетный режим, Query Only для кодирования только значений параметров. Локальная обработка в браузере, нулевая загрузка данных.

Похожие

Варианты использования

  • Отладка параметров API: сравнение вывода encodeURIComponent и encodeURI для решения проблем несоответствия подписи интерфейса
  • Декодирование логов: пакетное декодирование URL-закодированного содержимого в логах для восстановления читаемого текста
  • Построение URL: режим Query Only сохраняет имена ключей и кодирует только значения, избегая ошибок формата при ручной конкатенации
  • Фронтенд-разработка: подсветка помогает понять, какие символы экранируются, полезно для отладки перенаправлений страниц
  • Миграция данных: пакетная обработка URL-закодированных данных, экспортированных из устаревших систем, для преобразования в новый формат

Функции

  • Четыре режима кодирования: переключение между encodeURIComponent / encodeURI / full / RFC 3986 одним кликом, сравнение различий вывода в реальном времени
  • Подсветка кодирования: подсвечивает экранированные %XX-символы в реальном времени, янтарная маркировка делает результаты кодирования видимыми с первого взгляда
  • Пакетный режим: поддержка многострочного пакетного кодирования/декодирования, каждая строка обрабатывается независимо, идеально для логов или массовых данных
  • Режим Query Only: кодирует только часть значения параметра URL (после знака равенства), сохраняя имена ключей, символы и структуру пути нетронутыми
  • Дебаунс в реальном времени: автоматическое кодирование/декодирование за 300 мс, не нужно нажимать кнопки, результаты появляются при вводе
  • Подсчёт символов: отображает количество введённых символов в реальном времени, удобно для проверки ограничений длины параметров API

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

  1. Введите или вставьте URL или текст для кодирования/декодирования
  2. Выберите направление кодирования (Кодировать/Декодировать) и режим (Component / URI / full / RFC 3986)
  3. Включите пакетный режим для многострочных данных или Query Only для кодирования только значений параметров
  4. Проверьте подсвеченный результат и скопируйте закодированную строку для использования в API-запросах или построении URL

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

В чём разница между 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.

Что такое 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 янтарным цветом, чтобы пользователи сразу видели, какие символы были закодированы. Это помогает понять правила кодирования: буквы и цифры обычно являются безопасными символами, которые не кодируются, только китайский язык и специальные символы кодируются. Все вычисления выполняются локально в браузере, данные не загружаются.

术语表

Процентное кодирование (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 режимах кодирования

СимволЗначениеencodeURIComponentencodeURIRFC 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)

Code Examples

Кодирование/Декодирование 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());
    }
}

Authoritative References