Язык: Русский

tools / url

url/

Кодирование / декодирование URL и разбор полной ссылки на части с таблицей параметров запроса.

Исходный текст

Результат кодирования

Разобрать URL

Частые вопросы

Чем различаются encodeURIComponent и encodeURI и что выбрать

Для значения параметра или одного сегмента пути используйте encodeURIComponent, для всего адреса — encodeURI. Первая функция превращает в %XX и символы со специальным смыслом: : / ? & = #, поэтому годится только для одной части адреса; вторая их сохраняет, структура адреса не нарушается, но & и = внутри значения параметра она не обрабатывает. Буквы, цифры и - _ . ! ~ * ' ( ) не кодируются ни той, ни другой.

Почему пробел превращается в %20 и становится ли + пробелом при декодировании

Здесь пробел кодируется как %20, а не +. При декодировании + в поле остается как есть и не превращается в пробел, потому что decodeURIComponent такого преобразования не делает; только таблица параметров запроса в блоке «Разобрать URL» по правилам форм считает + пробелом. Чтобы декодировать значение вроде a+b из отправленной формы, сначала вручную замените + на пробел.

Что делать, если при декодировании появляется «не является допустимым кодированием UTF-8»

Эта цепочка %XX закодирована не в UTF-8. Чаще всего это старые сайты, где кириллица закодирована в Windows-1251 (например, %CF%F0%E8) или китайский текст — в GBK (например, %D6%D0); как и decodeURIComponent в браузере, этот инструмент принимает только UTF-8, поэтому сообщает об ошибке и указывает место. Содержимое в Windows-1251 или GBK можно преобразовать инструментом с поддержкой этих кодировок, например unquote(s, encoding='cp1251') или unquote(s, encoding='gbk') в Python. Такая же ошибка появляется, если при копировании текст обрезался, например у %E4%B8 не хватает последнего байта.

Что делать, если появляется сообщение «нет двух шестнадцатеричных цифр»

В тексте есть не закодированный знак процента, например 100% или 50%off. Знак процента начинает escape-последовательность в URL-кодировании, после него должны идти две шестнадцатеричные цифры. Замените этот % на %25 и декодируйте снова; в сообщении указано, каким по счету символом он является.

Что делать, если после декодирования остались %XX

Скорее всего, текст был закодирован дважды, например %2520 после первого декодирования дает %20. Декодируйте еще раз: нажмите «⇄ Результат как входные данные», чтобы вернуть результат в поле ввода, и снова нажмите «Декодировать».

Совпадает ли результат с URL-кодированием в PHP, Python или Java

В целом да, но в деталях есть отличия. encodeURIComponent близок к rawurlencode в PHP и urllib.parse.quote(s, safe='') в Python, но не кодирует ! ' ( ) *. URLEncoder в Java и urlencode в PHP записывают пробел как +, а здесь — %20. При интеграции с другой системой ориентируйтесь на правила декодирования, которые действительно использует получатель.

Почему «Разобрать URL» пишет, что нет протокола, или показывает не то, что я ввел

Для разбора нужен полный URL, который начинается с протокола вроде https://; если указать только домен или путь, будет ошибка. Результат дает встроенный в браузер разбор URL, поэтому он нормализуется: домен переводится в нижний регистр, если порт не указан или указан порт по умолчанию, показывается «(порт по умолчанию)», а символы не из ASCII в пути (например, кириллица) отображаются как %XX с дополнительной строкой с декодированным путем. Ключи и значения в таблице параметров запроса уже декодированы.

Отправляется ли введенный адрес на сервер

Нет. Кодирование, декодирование и разбор выполняются в браузере, поэтому токены, телефонные номера и другие параметры в адресе не покидают ваш браузер.