Кодування та декодування URL
Кодуйте та декодуйте URL-рядки, безпечна обробка спеціальних символів і не-ASCII тексту, придатно для передачі параметрів запиту та шляхів.
Інструкції з використання
Кодування URL перетворює спеціальні або не-ASCII символи на формат %XX, щоб забезпечити безпечну передачу в URL.
Використовуйте «Кодування», щоб перетворити текст у безпечний для URL формат (наприклад, для параметрів запиту).
Використовуйте «Декодування», щоб відновити оригінальні символи з послідовностей %XX.
Поширені сценарії: обробка параметрів запиту, передача даних форми, виклики API тощо.
Функції
- Два режими кодування: encodeURIComponent та encodeURI
- Гнучке управління пробілами: кодування як + або %20
- Реалізація перетворення в реальному часі зі статистикою довжини вводу/виводу
- Кнопки копіювання/очищення та двосторонній перенос між панелями
- Повна підтримка міжнародизації та багатотемного інтерфейсу DaisyUI
Що таке кодування URL
Кодування URL перетворює символи на послідовності %XX у форматі з процентним кодуванням, щоб забезпечити безпечну передачу в URL.
encodeURIComponent підходить для окремих компонентів (наприклад, значень параметрів запиту) і кодує більшість нелітерно-цифрових символів.
encodeURI підходить для цілих рядків URI і не кодує зарезервовані символи зі структурним значенням, такі як ?, &, =, / .
Поширені випадки використання
- Створення параметрів запиту (ключові слова пошуку, умови фільтрації тощо)
- Кодування та передача даних форм GET/POST
- Кодування параметрів API-запитів
- Безпечне розміщення користувацьких даних у сегментах шляху URL
Часті питання та пастки
- encodeURI vs encodeURIComponent: для окремих компонентів використовуйте component, для повного посилання — URI
- Пробіл та +: у application/x-www-form-urlencoded у рядку запиту пробіл часто позначається як +
- Уникайте подвійного декодування: кратне декодування може пошкодити дані
- Недійсні процентні послідовності викликають помилки; потрібно обробляти винятки грамотно
Як здійснювати кодування/декодування URL у мовах програмування
JavaScript
Кодування
// Component (recommended for query values)
const encoded = encodeURIComponent(text);
// If you need '+' for spaces in query strings
const encodedPlus = encoded.replace(/%20/g, '+');
// Full URI
const encodedUri = encodeURI(url);
Декодування
// Treat '+' as space if needed
const input = plusAsSpace ? s.replace(/\+/g, ' ') : s;
// Component
const dec1 = decodeURIComponent(input);
// Fallback to decodeURI when input is a full URL
const dec2 = decodeURI(input);
PHP
Кодування
// Component (RFC 3986)
$encoded = rawurlencode($text);
// '+' for spaces (application/x-www-form-urlencoded)
$encodedPlus = str_replace('%20', '+', $encoded);
// Full query usage
$query = http_build_query(['q' => '你好 世界', 'type' => 'text']);
Декодування
// Component
$decoded = rawurldecode($s);
// If input uses '+' for spaces
$decodedPlus = urldecode($s);
Python
Кодування
from urllib.parse import quote, quote_plus
# Component (RFC 3986)
enc = quote(text, safe='')
# '+' for spaces (application/x-www-form-urlencoded)
enc_plus = quote_plus(text)
Декодування
from urllib.parse import unquote, unquote_plus
# Component
dec = unquote(s)
# Input with '+' for spaces
dec_plus = unquote_plus(s)
Go
Кодування
import (
"net/url"
)
// Query component
enc := url.QueryEscape(text) // spaces => +
// Path segment
// go1.8+
// url.PathEscape(text)
Декодування
import (
"net/url"
)
// Query component
dec, _ := url.QueryUnescape(s)
// Path segment
// url.PathUnescape(s)
Rust
Кодування
// Cargo.toml: urlencoding = "^2"
use urlencoding::{encode, encode_binary};
let enc = encode(text); // component; spaces => %20
let enc_plus = enc.replace("%20", "+"); // if you need '+' for spaces
Декодування
use urlencoding::decode;
// decode treats '+' as space
let dec = decode(s)?; // Result, _>
Java
Кодування
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
// Query param / form style (spaces => '+')
String enc = URLEncoder.encode(text, StandardCharsets.UTF_8);
// For RFC3986-like component encoding, replace '+' with %20 if needed
String encSpace = enc.replace("+", "%20");
Декодування
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
// URLDecoder treats '+' as space
String dec = URLDecoder.decode(s, StandardCharsets.UTF_8);