Kódování a dekódování URL
Kódování a dekódování řetězců URL pro bezpečné zpracování speciálních znaků a ne-ASCII textu, vhodné pro parametry dotazu a přenos cest.
Návod k použití
URL kódování převádí speciální znaky nebo ne-ASCII znaky na formát %XX, aby bylo možné je bezpečně přenášet v URL.
Použijte „Kódovat“ k převodu textu na bezpečnou formu vhodnou pro URL (např. parametry dotazu).
Použijte „Dekódovat“ k obnovení původních znaků z řetězců %XX.
Běžné scénáře: zpracování parametrů dotazu, přenos dat formuláře, volání API atd.
Funkce
- Dva režimy kódování: encodeURIComponent a encodeURI
- Flexibilní zpracování mezer: kódování jako + nebo %20
- Reálný převod a zobrazení statistik délek vstupu a výstupu
- Tlačítka pro kopírování, vyčištění a dvousměrné odeslání na protější panel
- Plná podpora mezinárodního rozhraní a více témat DaisyUI
Co je URL kódování
URL kódování převádí znaky na posloupnosti %XX v procentním kódování, aby bylo možné je bezpečně přenášet v URL.
encodeURIComponent je vhodné pro jednotlivé komponenty (např. hodnoty parametrů dotazu) a kóduje většinu nealfanumerických znaků.
encodeURI je vhodné pro celé URI řetězce a nekóduje rezervované znaky s významem, jako jsou ?, &, =, / .
Běžné použití
- Vytváření parametrů dotazu (hledané klíčové slovo, filtrační podmínky atd.)
- Kódování a přenos dat formuláře GET/POST
- Kódování parametrů API požadavků
- Bezpečné umístění uživatelského vstupu do segmentů cesty URL
Časté otázky a pasti
- encodeURI vs encodeURIComponent: pro jednotlivé komponenty použijte component, pro celou adresu použijte URI
- Mezera a +: v application/x-www-form-urlencoded se ve stringu dotazu často používá + pro reprezentaci mezery
- Vyhněte se dvojitému dekódování: vícekrát dekódování může poškodit data
- Neplatná posloupnost % vyvolá chybu; je třeba zpracovávat výjimky elegantně
Jak provést kódování a dekódování URL v programovacích jazycích
JavaScript
Kódování
// 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);
Dekódování
// 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
Kódování
// 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']);
Dekódování
// Component
$decoded = rawurldecode($s);
// If input uses '+' for spaces
$decodedPlus = urldecode($s);
Python
Kódování
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)
Dekódování
from urllib.parse import unquote, unquote_plus
# Component
dec = unquote(s)
# Input with '+' for spaces
dec_plus = unquote_plus(s)
Go
Kódování
import (
"net/url"
)
// Query component
enc := url.QueryEscape(text) // spaces => +
// Path segment
// go1.8+
// url.PathEscape(text)
Dekódování
import (
"net/url"
)
// Query component
dec, _ := url.QueryUnescape(s)
// Path segment
// url.PathUnescape(s)
Rust
Kódování
// 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
Dekódování
use urlencoding::decode;
// decode treats '+' as space
let dec = decode(s)?; // Result, _>
Java
Kódování
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");
Dekódování
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
// URLDecoder treats '+' as space
String dec = URLDecoder.decode(s, StandardCharsets.UTF_8);