Рекомендуемые инструменты
Кодирование и декодирование URL
Инструмент кодирования и декодирования URL, обрабатывает специальные символы в URL
Обзор инструмента: Инструмент Кодирования и Декодирования URL
Кодирование URL (также известное как процентное кодирование) - это механизм для кодирования информации в URL, когда данные содержат специальные символы или не-ASCII символы. Этот инструмент предоставляет двунаправленную конвертацию между обычным текстом и форматом кодированного URL, что необходимо для веб-разработки и API коммуникации.
Что такое Инструмент Кодирования и Декодирования URL
Инструмент Кодирования и Декодирования URL кодирует или декодирует URL‑параметры, избегая проблем со спецсимволами.
Как пользоваться
- Вставьте URL или параметры.
- Выберите кодирование/декодирование.
- Скопируйте результат.
Частые сценарии
- Безопасная передача параметров
- Отладка спецсимволов в URL
- Проверка параметров API
❓ Частые вопросы
В1: Неразборчивый вывод?
О: Проверьте UTF-8 и отсутствие двойного кодирования.
В2: Как обрабатываются пробелы?
О: Пробелы становятся %20 или +.
В3: Пакетная обработка?
О: Используйте многострочный ввод при наличии.
✨ Основные Характеристики
- 🔄 Двунаправленная Конвертация : Совместим с кодированием и декодированием URL
- 🌐 Поддержка Unicode : Правильно обрабатывает русские символы и специальные символы
- 📊 Множественные Форматы : Совместим с кодированием компонентов URL и полного URL
- 📋 Копирование Одним Кликом : Результаты могут быть скопированы напрямую для использования
- ⚡ Обработка в Реальном Времени : Мгновенная конвертация согласно вводу
📖 Примеры Использования
Кодирование Русского Текста
Ввод:
Привет, как дела? Всё хорошо!
Кодированный URL:
%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82%2C%20%D0%BA%D0%B0%D0%BA%20%D0%B4%D0%B5%D0%BB%D0%B0%3F%20%D0%92%D1%81%D1%91%20%D1%85%D0%BE%D1%80%D0%BE%D1%88%D0%BE%21
Кодирование URL с Параметрами
Ввод:
https://www.toolmi.com/поиск?q=полезный инструмент&категория=разработка
Кодированный URL:
https%3A//www.toolmi.com/%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%3Fq%3D%D0%BF%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B9%20%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%26%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F%3D%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0
Кодирование JSON Данных
Ввод:
{"имя": "Иван Петров", "email": "[email protected]"}
Кодированный URL:
%7B%22%D0%B8%D0%BC%D1%8F%22%3A%20%22%D0%98%D0%B2%D0%B0%D0%BD%20%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2%22%2C%20%22email%22%3A%20%22ivan%40example.com%22%7D
🎯 Сценарии Применения
1. Разработка API
// API клиент с автоматическим кодированием параметров
class КлиентAPI {
constructor(базовыйUrl) {
this.базовыйUrl = базовыйUrl;
}
// Построить URL с кодированными параметрами
построитьURL(endpoint, параметры = {}) {
const url = new URL(endpoint, this.базовыйUrl);
// Добавить кодированные параметры запроса
Object.entries(параметры).forEach(([ключ, значение]) => {
if (значение !== null && значение !== undefined) {
url.searchParams.append(ключ, значение);
}
});
return url.toString();
}
// Сделать GET запрос с параметрами
async get(endpoint, параметры = {}) {
const url = this.построитьURL(endpoint, параметры);
try {
const ответ = await fetch(url);
if (!ответ.ok) {
throw new Error(`HTTP ошибка: ${ответ.status}`);
}
return await ответ.json();
} catch (ошибка) {
console.error('Ошибка GET запроса:', ошибка);
throw ошибка;
}
}
// Сделать POST запрос с кодированными данными
async post(endpoint, данные) {
const url = this.построитьURL(endpoint);
try {
const ответ = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(данные)
});
if (!ответ.ok) {
throw new Error(`HTTP ошибка: ${ответ.status}`);
}
return await ответ.json();
} catch (ошибка) {
console.error('Ошибка POST запроса:', ошибка);
throw ошибка;
}
}
// Кодировать данные формы
кодироватьФорму(данные) {
const параметры = new URLSearchParams();
Object.entries(данные).forEach(([ключ, значение]) => {
if (значение !== null && значение !== undefined) {
параметры.append(ключ, значение);
}
});
return параметры.toString();
}
}
// Пример использования
const api = new КлиентAPI('https://api.toolmi.com');
// Поиск пользователей с фильтрами
const параметрыПоиска = {
имя: 'Иван Петров',
email: '[email protected]',
город: 'Москва',
активен: true
};
api.get('/пользователи', параметрыПоиска)
.then(пользователи => {
console.log('Найденные пользователи:', пользователи);
})
.catch(ошибка => {
console.error('Ошибка поиска:', ошибка);
});
// Создать нового пользователя
const новыйПользователь = {
имя: 'Мария Иванова',
email: '[email protected]',
био: 'Разработчик, увлеченный технологиями!'
};
api.post('/пользователи', новыйПользователь)
.then(результат => {
console.log('Пользователь создан:', результат);
});
2. Манипуляция URL
// Утилита для продвинутой манипуляции URL
class МанипуляторURL {
constructor(url) {
this.url = new URL(url);
}
// Добавить или обновить параметр
установитьПараметр(ключ, значение) {
this.url.searchParams.set(ключ, значение);
return this;
}
// Удалить параметр
удалитьПараметр(ключ) {
this.url.searchParams.delete(ключ);
return this;
}
// Получить декодированный параметр
получитьПараметр(ключ) {
return this.url.searchParams.get(ключ);
}
// Получить все параметры
получитьВсеПараметры() {
const параметры = {};
for (const [ключ, значение] of this.url.searchParams.entries()) {
параметры[ключ] = значение;
}
return параметры;
}
// Очистить все параметры
очиститьПараметры() {
this.url.search = '';
return this;
}
// Изменить домен
изменитьДомен(новыйДомен) {
this.url.hostname = новыйДомен;
return this;
}
// Изменить протокол
изменитьПротокол(новыйПротокол) {
this.url.protocol = новыйПротокол;
return this;
}
// Добавить фрагмент хеша
установитьХеш(хеш) {
this.url.hash = хеш;
return this;
}
// Получить финальный URL
toString() {
return this.url.toString();
}
// Анализировать компоненты URL
анализировать() {
return {
протокол: this.url.protocol,
домен: this.url.hostname,
порт: this.url.port,
путь: this.url.pathname,
параметры: this.получитьВсеПараметры(),
хеш: this.url.hash,
полныйUrl: this.url.toString()
};
}
// Валидировать URL
static валидировать(url) {
try {
new URL(url);
return { действителен: true };
} catch (ошибка) {
return {
действителен: false,
ошибка: ошибка.message
};
}
}
// Сравнить URL (игнорируя порядок параметров)
static сравнить(url1, url2) {
try {
const u1 = new URL(url1);
const u2 = new URL(url2);
// Сравнить основные компоненты
if (u1.protocol !== u2.protocol ||
u1.hostname !== u2.hostname ||
u1.port !== u2.port ||
u1.pathname !== u2.pathname ||
u1.hash !== u2.hash) {
return false;
}
// Сравнить параметры (игнорируя порядок)
const params1 = new Set(u1.searchParams.toString().split('&').sort());
const params2 = new Set(u2.searchParams.toString().split('&').sort());
if (params1.size !== params2.size) {
return false;
}
for (const param of params1) {
if (!params2.has(param)) {
return false;
}
}
return true;
} catch (ошибка) {
return false;
}
}
}
// Примеры использования
const манипулятор = new МанипуляторURL('https://www.toolmi.com/поиск');
// Построить URL поиска
манипулятор
.установитьПараметр('q', 'инструмент разработки')
.установитьПараметр('категория', 'программирование')
.установитьПараметр('сортировка', 'релевантность')
.установитьХеш('результаты');
console.log('Построенный URL:', манипулятор.toString());
// Анализировать URL
const анализ = манипулятор.анализировать();
console.log('Анализ URL:', анализ);
// Валидировать URL
console.log('Действительный URL:', МанипуляторURL.валидировать('https://www.toolmi.com'));
console.log('Недействительный URL:', МанипуляторURL.валидировать('не-url'));
// Сравнить URL
const url1 = 'https://example.com?a=1&b=2';
const url2 = 'https://example.com?b=2&a=1';
console.log('URL одинаковые:', МанипуляторURL.сравнить(url1, url2)); // true
3. Система Маршрутизации
// Система маршрутизации с кодированием URL
class СистемаМаршрутизации {
constructor() {
this.маршруты = new Map();
this.промежуточноеПО = [];
this.глобальныеПараметры = new Map();
}
// Зарегистрировать маршрут
зарегистрироватьМаршрут(шаблон, обработчик, опции = {}) {
const маршрут = {
шаблон: this.компилироватьШаблон(шаблон),
обработчик,
опции
};
this.маршруты.set(шаблон, маршрут);
return this;
}
// Компилировать шаблон маршрута в regex
компилироватьШаблон(шаблон) {
const параметры = [];
// Конвертировать шаблон как '/пользователь/:id/профиль' в regex
const regex = шаблон.replace(/:([^/]+)/g, (совпадение, имяПарам) => {
параметры.push(имяПарам);
return '([^/]+)';
});
return {
regex: new RegExp(`^${regex}$`),
параметры
};
}
// Навигировать к URL
async навигировать(url, данные = {}) {
try {
const urlObj = new URL(url, window.location.origin);
const путь = urlObj.pathname;
// Найти соответствующий маршрут
const соответствующийМаршрут = this.найтиМаршрут(путь);
if (!соответствующийМаршрут) {
throw new Error(`Маршрут не найден: ${путь}`);
}
// Извлечь параметры из URL
const параметры = this.извлечьПараметры(путь, соответствующийМаршрут.маршрут);
// Извлечь параметры запроса
const параметрыЗапроса = {};
for (const [ключ, значение] of urlObj.searchParams.entries()) {
параметрыЗапроса[ключ] = значение;
}
// Создать контекст маршрута
const контекст = {
url: urlObj.toString(),
путь,
параметры,
запрос: параметрыЗапроса,
данные,
хеш: urlObj.hash
};
// Выполнить промежуточное ПО
for (const mw of this.промежуточноеПО) {
await mw(контекст);
}
// Выполнить обработчик маршрута
await соответствующийМаршрут.маршрут.обработчик(контекст);
// Обновить историю браузера
if (соответствующийМаршрут.маршрут.опции.обновлятьИсторию !== false) {
history.pushState(данные, '', url);
}
return контекст;
} catch (ошибка) {
console.error('Ошибка навигации:', ошибка);
throw ошибка;
}
}
// Найти соответствующий маршрут
найтиМаршрут(путь) {
for (const [шаблон, маршрут] of this.маршруты.entries()) {
if (маршрут.шаблон.regex.test(путь)) {
return { шаблон, маршрут };
}
}
return null;
}
// Извлечь параметры из URL
извлечьПараметры(путь, маршрут) {
const совпадение = путь.match(маршрут.шаблон.regex);
const параметры = {};
if (совпадение) {
маршрут.шаблон.параметры.forEach((имяПарам, индекс) => {
параметры[имяПарам] = decodeURIComponent(совпадение[индекс + 1]);
});
}
return параметры;
}
// Добавить промежуточное ПО
использовать(промежуточноеПО) {
this.промежуточноеПО.push(промежуточноеПО);
return this;
}
// Генерировать URL для маршрута
генерироватьURL(шаблон, параметры = {}, запрос = {}) {
let url = шаблон;
// Заменить параметры в URL
Object.entries(параметры).forEach(([ключ, значение]) => {
url = url.replace(`:${ключ}`, encodeURIComponent(значение));
});
// Добавить параметры запроса
const urlObj = new URL(url, window.location.origin);
Object.entries(запрос).forEach(([ключ, значение]) => {
urlObj.searchParams.set(ключ, значение);
});
return urlObj.toString();
}
}
// Пример использования
const маршрутизатор = new СистемаМаршрутизации();
// Промежуточное ПО аутентификации
маршрутизатор.использовать(async (контекст) => {
console.log(`Навигация к: ${контекст.путь}`);
// Проверить аутентификацию при необходимости
if (контекст.путь.startsWith('/админ')) {
const токен = localStorage.getItem('authToken');
if (!токен) {
throw new Error('Доступ запрещен: требуется аутентификация');
}
}
});
// Зарегистрировать маршруты
маршрутизатор
.зарегистрироватьМаршрут('/', async (ctx) => {
console.log('Главная страница');
})
.зарегистрироватьМаршрут('/пользователь/:id', async (ctx) => {
console.log(`Профиль пользователя: ${ctx.параметры.id}`);
console.log('Параметры запроса:', ctx.запрос);
})
.зарегистрироватьМаршрут('/поиск', async (ctx) => {
console.log(`Поиск по: ${ctx.запрос.q}`);
});
// Навигировать
маршрутизатор.навигировать('/пользователь/123?вкладка=профиль&редактировать=true')
.then(контекст => {
console.log('Навигация завершена:', контекст);
})
.catch(ошибка => {
console.error('Ошибка навигации:', ошибка);
});
// Генерировать URL
const urlПрофиля = маршрутизатор.генерироватьURL('/пользователь/:id',
{ id: 'иван-петров' },
{ вкладка: 'настройки' }
);
console.log('Сгенерированный URL:', urlПрофиля);
🔧 Технические Детали
Процентное Кодирование
Кодирование URL использует формат %XX где XX - шестнадцатеричное значение:
Общие Специальные Символы:
- Пробел:
%20 !:%21":%22#:%23$:%24%:%25&:%26':%27(:%28):%29+:%2B
Русские Символы
Кириллические Символы (UTF-8):
а:%D0%B0б:%D0%B1в:%D0%B2г:%D0%B3д:%D0%B4е:%D0%B5ё:%D1%91ж:%D0%B6з:%D0%B7и:%D0%B8й:%D0%B9к:%D0%BA
💡 Советы по Использованию
- Параметры Запроса : Всегда кодировать значения параметров запроса
- Компоненты Пути : Кодировать сегменты пути, содержащие специальные символы
- Данные Формы : Использовать
application/x-www-form-urlencodedдля данных формы - RESTful API : Кодировать ID и параметры в URL API
⚠️ Важные Замечания
- Двойное Кодирование : Избегать кодирования уже кодированных URL
- Подходящий Контекст : Использовать
encodeURIComponent()для параметров иencodeURI()для полных URL - Декодирование : Всегда декодировать данные, полученные из URL
- Валидация : Валидировать декодированные URL для предотвращения атак
🚀 Как Использовать
- Ввод Данных : Введите текст или URL для кодирования/декодирования
- Выбор Операции : Выберите "Кодировать" или "Декодировать"
- Проверка Результатов : Результат отображается мгновенно
- Использование Копирования : Нажмите "Копировать" для копирования результата
- Применение : Используйте в веб-разработке, API и манипуляции URL
Совет : Этот инструмент обрабатывает локально на стороне клиента и не отправляет данные на сервер, гарантируя конфиденциальность и безопасность.