URL-кодировщик / декодировщик/ Кодирование · Декодирование · Форма

Кодируйте и декодируйте URL с помощью encodeURIComponent, encodeURI или кодирования форм в реальном времени.

Кодировать все спецсимволы (рекомендуется, для значений параметров запроса)

Исходный текст
0 символов
Закодировано
Соотношение размера: —%0 символов
Распространённые кодировки
%20 / +
!%21
"%22
#%23
%%25
&%26
'%27
+%2B
/%2F
=%3D
?%3F
@%40

Этот инструмент решил вашу проблему?

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

URL-кодирование (процентное кодирование) преобразует特殊ные символы в `%` плюс две шестнадцатеричные цифры. URL允许 только буквы, цифры и少数符号 (`-_.~`). Другие символы, такие как пробел (%20)或非-ASCII символы, должны быть закодированы. Браузеры自动 кодируют URL в адресной строке,但 при программном построении URL необходимо处理 кодирование вручную.

Типичные сценарии URL-кодирования

Передача特殊ных символов в параметрах запроса (например, поисковые запросы с `&` или `=`), отправка данных формы (POST по умолчанию использует URL-кодирование), API-запросы с JSON или非-ASCII параметрами и OAuth callback URL. Используйте `encodeURIComponent()` в JavaScript или `urllib.parse.quote()` в Python.

Примеры кода

JavaScript
// Encode a query parameter value
encodeURIComponent("Hello World! 中文")
// "Hello%20World!%20%E4%B8%AD%E6%96%87"

// Build a full query string (recommended)
const params = new URLSearchParams({
  q: "hello world",
  lang: "zh-CN",
  page: "1",
});
params.toString()
// "q=hello+world&lang=zh-CN&page=1"

// Decode
decodeURIComponent("Hello%20World%21")
// "Hello World!"
Python
from urllib.parse import (
    quote, unquote,
    urlencode, quote_plus
)

# Encode single value
quote("Hello World! 中文")
# 'Hello%20World%21%20%E4%B8%AD%E6%96%87'

# Form encoding (spaces → +)
quote_plus("hello world")
# 'hello+world'

# Build query string
urlencode({"q": "hello world", "page": 1})
# 'q=hello+world&page=1'

# Decode
unquote("Hello%20World%21")  # 'Hello World!'
Go
import "net/url"

// Encode a path segment
url.PathEscape("hello world/中文")
// "hello%20world%2F%E4%B8%AD%E6%96%87"

// Encode a query value
url.QueryEscape("hello world")
// "hello+world"

// Build query string
params := url.Values{}
params.Set("q", "hello world")
params.Set("lang", "zh-CN")
params.Encode()
// "lang=zh-CN&q=hello+world"

// Parse a URL
u, _ := url.Parse("https://example.com/search?q=hello+world")
u.Query().Get("q")  // "hello world"
Shell (curl)
# curl handles encoding automatically with --data-urlencode
curl -G https://api.example.com/search \
  --data-urlencode "q=hello world 中文" \
  --data-urlencode "page=1"

# Manual percent-encoding with Python
python3 -c "
import sys
from urllib.parse import quote
print(quote(sys.stdin.read().strip()))
" <<< "hello world 中文"

# Using jq to build encoded JSON body
curl -X POST https://api.example.com \
  -H 'Content-Type: application/json' \
  -d "$(jq -n --arg q 'hello world' '{query: $q}')"

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

В чем разница между encodeURIComponent и encodeURI?
encodeURIComponent кодирует почти все специальные символы (включая :/?#[]@!$&'()*+,;=) и используется для отдельных значений параметров запроса. encodeURI сохраняет структурные символы URL, что подходит для кодирования полного URL. В большинстве случаев используйте encodeURIComponent.
Что такое кодирование форм (application/x-www-form-urlencoded)?
Кодирование форм — это формат по умолчанию для отправки HTML-форм. Единственное отличие от encodeURIComponent в том, что пробелы становятся + вместо %20. Браузеры автоматически используют это при отправке <form>, и многие API также принимают тело запроса в этом формате.
Почему URL не могут содержать не-ASCII символы?
Спецификация URL (RFC 3986) допускает только ASCII-символы. Не-ASCII символы, такие как CJK, сначала должны быть закодированы в UTF-8 в последовательность байтов, затем каждый байт записывается как %XX. Например, китайский символ 中 кодируется в URL как %E4%B8%AD.
Какие символы не нуждаются в URL-кодировании?
«Незарезервированные символы» RFC 3986 никогда не нуждаются в кодировании: буквы (A-Z, a-z), цифры (0-9) и четыре символа - _ . ~. В отдельных компонентах URL некоторые зарезервированные символы также допускаются, но обычно безопаснее кодировать все не буквенно-цифровые символы.
И %20, и + обозначают пробел — в чем разница?
%20 — это универсальная URL-кодировка пробела, действительная в любом месте URL. Знак + означает «пробел» только в строках запроса в соглашении application/x-www-form-urlencoded — в путях URL + означает буквальный знак плюс. Универсальное использование %20 устраняет неоднозначность.
Как правильно строить строки запроса URL в JavaScript?
Используйте API URLSearchParams: new URLSearchParams({ key: value }).toString() автоматически обрабатывает кодирование. Или вручную кодируйте каждое значение с помощью encodeURIComponent(value) при конкатенации. Никогда не конкатенируйте необработанные незакодированные строки — это приводит к уязвимостям внедрения и ошибкам парсинга.