Pengkodan dan Pende kodan URL
Mengkod dan mende kod string URL, menangani karakter khas dan teks bukan ASCII dengan selamat, sesuai untuk parameter query dan penghantaran laluan.
Arahan Penggunaan
Pengkodan URL menukar karakter khas atau teks bukan ASCII kepada format %XX supaya boleh dihantar dengan selamat dalam URL.
Gunakan ‘Kodkan’ untuk menukar teks kepada bentuk selamat yang sesuai untuk URL (contohnya, parameter query).
Gunakan ‘Dekod’ untuk mengembalikan urutan %XX kepada karakter asal.
Skenario biasa: Mengendalikan parameter query, penghantaran data form, panggilan API, dsb.
Ciri-ciri
- Dua mod pengkodan: encodeURIComponent dan encodeURI
- Pengurusan ruang fleksibel: dikodkan sebagai + atau %20
- Penukaran serta-merta dengan statistik panjang masukan/keluaran
- Butang salin/kosongkan dan hantar dua arah ke panel lawan
- Sokongan penuh antarabangsa dan tema pelbagai DaisyUI
Apakah Kodan URL?
Pengkodan URL mengubah karakter menjadi urutan kod peratus %XX untuk penghantaran selamat dalam URL.
encodeURIComponent sesuai untuk komponen tunggal (seperti nilai parameter kueri tunggal), dan akan mengkod hampir semua karakter bukan alfanumerik.
encodeURI sesuai untuk string URI lengkap, dan tidak akan mengkod karakter simpan seperti ?, &, =, / yang mempunyai makna struktur.
Kegunaan Biasa
- Membina parameter kueri (kata kunci carian, syarat penapis, dll.)
- Penghantaran data bentuk GET/POST yang dikodkan
- Pengkodan parameter permintaan API
- Memasukkan input pengguna secara selamat ke dalam segmen laluan URL
Soalan Lazim & Perangkap
- encodeURI vs encodeURIComponent: Gunakan component untuk parameter, gunakan URI untuk pautan penuh
- Kosong dan +: application/x-www-form-urlencoded sering menggunakan + untuk mewakili ruang dalam kueri
- Elakkan dekod berulang: Dekod berulang boleh merosakkan data
- Urutan peratus tidak sah akan menghasilkan ralat; perlukan penanganan ralat yang cekap
Bagaimana melakukan pengkodan dan pende kodan URL dalam bahasa pengaturcaraan
JavaScript
Kodkan
// 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);
Dekod
// 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
Kodkan
// 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']);
Dekod
// Component
$decoded = rawurldecode($s);
// If input uses '+' for spaces
$decodedPlus = urldecode($s);
Python
Kodkan
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)
Dekod
from urllib.parse import unquote, unquote_plus
# Component
dec = unquote(s)
# Input with '+' for spaces
dec_plus = unquote_plus(s)
Go
Kodkan
import (
"net/url"
)
// Query component
enc := url.QueryEscape(text) // spaces => +
// Path segment
// go1.8+
// url.PathEscape(text)
Dekod
import (
"net/url"
)
// Query component
dec, _ := url.QueryUnescape(s)
// Path segment
// url.PathUnescape(s)
Rust
Kodkan
// 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
Dekod
use urlencoding::decode;
// decode treats '+' as space
let dec = decode(s)?; // Result, _>
Java
Kodkan
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");
Dekod
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
// URLDecoder treats '+' as space
String dec = URLDecoder.decode(s, StandardCharsets.UTF_8);