Enkode dan dekode URL
**URL:** `/url-encode-decode/` **URL:** `/url-encode-decode/` **Schema:** `WebApplication` + `FAQPage` + `BreadcrumbList`
Semua perhitungan dijalankan di browser. Tidak ada yang Anda masukkan yang dikirim ke server.
Hasil diperbarui saat mengetik. Ctrl/Cmd+Enter menyalin hasil utama.
Hasil
—
Tampilan bit
Tampilkan langkah
Encode dan Decode URL menerapkan pengkodean RFC 3986 persen ke teks dan membalikkan urutan %HH kembali ke karakter. Mode komponen mengkodekan karakter khusus seperti /, ? dan & sehingga karakter tersebut dapat ditempatkan dengan aman di dalam satu parameter kueri. Mode URI penuh mempertahankan pembatas struktural sehingga alamat lengkap tetap menjadi tautan yang dapat digunakan. Penanganan ruang menawarkan %20 dan tanda plus pengkodean formulir.
Semua pengkodean dan decoding berjalan di browser Anda. Tidak ada yang Anda tempel yang dikirim ke server.
Enkode teks untuk penggunaan yang aman di URL
Pengkodean persen menggantikan byte yang tidak aman atau dicadangkan dengan tanda persen diikuti oleh dua digit heksadesimal. Digitnya adalah nilai byte, biasanya dari UTF-8. Masukkan string, pilih mode komponen atau URI lengkap, dan salin hasil yang dikodekan ke dalam string kueri, segmen jalur, atau target pengalihan.
Karakter yang sudah ada di set yang tidak dicadangkan akan diteruskan tanpa perubahan. Segala sesuatu yang lain menjadi urutan %HH dalam mode komponen. Pengkodean dapat dibalik ketika aturan yang sama digunakan pada dekode; mencampurkan pengkodean bentuk tanda plus dengan gaya jalur %20 adalah sumber umum dari perjalanan bolak-balik yang terputus.
Decode string yang dikodekan persen
Decoding menemukan setiap % diikuti oleh dua digit hex, mengonversi pasangan tersebut menjadi byte, dan membangun kembali teks asli dengan pengkodean karakter yang dipilih. Satu-satunya % atau % dengan digit non-hex adalah kesalahan. Tanda tambah secara opsional dapat diperlakukan sebagai spasi ketika masukan berasal dari badan application/x-www-form-urlencoded.
Pengkodean bertingkat muncul ketika suatu nilai dikodekan dua kali. Penguraian kode sekali mungkin masih menyisakan urutan %25 yang mewakili persentase literal. Dekode lagi hanya jika lapisan kedua itu disengaja; decoding ganda buta merusak data yang berisi karakter % yang sebenarnya.
Memahami karakter yang dicadangkan dan tidak dicadangkan
RFC 3986 membagi ASCII menjadi karakter yang tidak dicadangkan yang tidak memerlukan pengkodean dalam URI, dan karakter yang dicadangkan yang membawa makna struktural seperti pembatas. Huruf, angka, dan -_.~ yang tidak dicadangkan tetap literal. Tanda khusus seperti /, ? dan & harus dikodekan dalam persen ketika muncul sebagai data, bukan sebagai sintaksis yang membingkai URL.
Tidak direservasi: A hingga Z, a hingga z, 0 hingga 9, tanda hubung -, garis bawah _, titik ., tanda gelombang ~
Dipesan (gen-delims): `: / ?
Dipesan (sub-delim): ! $&' ( )*+ , ; =
Karakter yang tidak dicadangkan tetap literal. Karakter yang dicadangkan harus dikodekan ketika muncul sebagai data, bukan sebagai pembatas. Tanda tanya di dalam nilai parameter adalah data; tanda tanya yang memulai string kueri adalah struktur. Pemilihan mode adalah bagaimana kalkulator mengetahui peran yang dimainkan setiap karakter.
Enkode seluruh URL versus satu parameter
Pengkodean URI penuh, mirip dengan encodeURI JavaScript, hanya menyisakan karakter struktural sehingga https:// dan garis miring tetap bertahan. Pengkodean komponen, mirip dengan encodeURIComponent, mengkodekan karakter tersebut sehingga nilai dapat berada di dalam parameter tanpa merusak URL di sekitarnya. Memilih mode yang salah akan menghancurkan tautan atau meninggalkan pembatas yang salah membagi kueri.
| Input | Full-URI style | Component style |
|---|---|---|
https://example.com/a b | https://example.com/a%20b | https%3A%2F%2Fexample.com%2Fa%20b |
red&blue | red&blue | red%26blue |
a=b | a=b | a%3Db |
Pengkodean seluruh URL dengan mode komponen akan menghancurkannya sebagai tautan: skema titik dua dan garis miring menjadi %3A dan %2F. Pengkodean satu parameter dengan mode URI penuh akan membiarkan & dan = tetap utuh, sehingga kueri akan terpecah secara tidak benar. Pilih mode yang cocok dengan slot yang akan ditempati string.
Kodekan garis miring dan tanda tanya
String perlengkapan / dan ? dalam mode komponen menjadi %2F%20dan%20%3F. Garis miring dan tanda tanya adalah pembatas khusus yang diperlakukan di sini sebagai teks muatan, sehingga masing-masing di-escape. Spasi menjadi %20, sedangkan huruf dalam dan tidak dicadangkan dan diteruskan tanpa perubahan dari kiri ke kanan melintasi string.
| Character | Reason | Encoded |
|---|---|---|
/ | reserved path delimiter | %2F |
| space | not unreserved | %20 |
a, n, d | unreserved letters | unchanged |
? | reserved query delimiter | %3F |
Menelusuri string dari kiri ke kanan: menyandikan /, menyandikan spasi, meneruskan dan, menyandikan spasi, menyandikan ?. Hasil %2F%20dan%20%3F aman untuk ditempatkan di parameter kueri bernama, misalnya, q. Menggunakan mode URI penuh pada string yang sama akan meninggalkan / dan ? literal, yang hanya benar jika karakter tersebut dimaksudkan sebagai struktur dan bukan sebagai teks payload.
Pahami %20 versus tanda plus
Spasi dikodekan sebagai %20 di jalur URI dan dalam string kueri modern yang mengikuti RFC 3986. Formulir HTML yang dikirimkan sebagai application/x-www-form-urlencoded secara historis mengkodekan spasi sebagai +. Kedua konvensi muncul dalam lalu lintas produksi, dan memperlakukannya sebagai identik adalah bug pengodean ruang yang paling umum saat mendekode masukan campuran.
| Context | Space encoding |
|---|---|
| Path segment | %20 |
| RFC 3986 query | %20 |
| Form body / legacy query | + |
Data masuk literal plus harus dikodekan sebagai %2B, atau dekoder formulir akan memperlakukannya sebagai spasi. Kalkulator memberi label konvensi spasi mana yang aktif sehingga + yang didekodekan tidak disalahartikan sebagai karakter plus saat mode formulir aktif, dan %20 tidak ditolak saat mode jalur aktif.
Pisahkan URL menjadi beberapa bagian
URL tipikal memiliki skema, host, port opsional, jalur, string dan fragmen kueri, serta aturan pengkodean yang berbeda-beda di setiap bagiannya. Pembatas struktural seperti ://, /, ?, &, = dan # tetap literal saat membingkai alamat.
Nama parameter, nilai parameter, dan segmen jalur yang membawa data dikodekan secara individual dalam mode komponen sebelum pembatas tersebut digabungkan.
https://example.com:443/search?q=a%20b&lang=en#top
└─┬─┘ └─────┬─────┘ └─┬──┘ └───────┬───────┘ └┬┘
scheme host path query fragment
| Part | Role |
|---|---|
| Scheme | Protocol, such as https |
| Host | Domain or IP, with optional port |
| Path | Resource location, slash-separated |
| Query | Parameter list after ?, joined by & |
| Fragment | Client-side location after #, not sent to the server in the request URI the same way |
Enkodekan nama dan nilai parameter satu per satu dalam mode komponen, lalu gabungkan dengan & dan = literal. Enkodekan segmen jalur satu per satu jika mengandung spasi atau karakter khusus, dengan menjaga garis miring yang memisahkan segmen tetap literal.
Baca tabel pengkodean karakter
Tabel di bawah mencantumkan karakter umum yang dicadangkan dan tidak aman dengan bentuk persennya dalam pengkodean byte UTF-8. Spasi menjadi %20, ampersand %26, dan hash %23. Karakter non-ASCII diperluas menjadi beberapa unit %HH karena setiap byte UTF-8 dikodekan secara terpisah, bukan sebagai mesin terbang abstrak tunggal.
| Char | Percent | Notes |
|---|---|---|
| space | %20 | Or + in form encoding |
! | %21 | |
# | %23 | Fragment delimiter |
$ | %24 | |
& | %26 | Query pair delimiter |
' | %27 | |
( | %28 | |
) | %29 | |
+ | %2B | Literal plus |
, | %2C | |
/ | %2F | Path delimiter |
: | %3A | Scheme / host separator |
; | %3B | |
= | %3D | Parameter assignment |
? | %3F | Query start |
@ | %40 | Userinfo separator |
[ | %5B | |
] | %5D |
Teks non-ASCII pertama-tama dinyatakan sebagai byte UTF-8, kemudian setiap byte dikodekan dalam persen. Oleh karena itu, satu karakter dapat diperluas menjadi dua atau tiga unit %HH. Penyelaman mendalam pengkodean karakter untuk Shift JIS dan kumpulan warisan serupa langsung dengan alat Base64; tautan halaman ini daripada mengulangi katalog itu.
Pertanyaan yang sering diajukan
Apa itu pengkodean persen?
Pengkodean persen menggantikan satu byte dengan % diikuti dengan dua digit heksadesimal dari nilai byte tersebut. Ini memungkinkan karakter yang dicadangkan dan non-ASCII masuk ke dalam URL tanpa dibaca sebagai sintaksis. Decoding membalikkan substitusi.
Kapan pengkodean komponen harus digunakan?
Gunakan pengkodean komponen untuk nama atau nilai parameter tunggal, segmen jalur yang merupakan data murni, atau string apa pun yang akan disisipkan di sebelah pembatas struktural. Ini mengkodekan /, ?, & dan = sehingga mereka tidak dapat membagi URL.
Kapan pengkodean URI penuh harus digunakan?
Gunakan pengkodean URI lengkap ketika masukan sudah berupa URL lengkap dan hanya karakter ilegal seperti spasi yang boleh diubah. Titik dua dan garis miring struktural tetap literal sehingga hasilnya tetap berupa alamat yang dapat diklik.
Mengapa / dan ? menjadi %2F%20dan%20%3F?
Dalam mode komponen, garis miring dan tanda tanya diperlakukan sebagai data, sehingga dikodekan menjadi %2F dan %3F. Spasi menjadi %20. Huruf dalam dan tidak dicadangkan dan tetap sebagaimana adanya.
Apakah + sama dengan %20?
Tidak. %20 adalah pengkodean RFC 3986 untuk suatu spasi. + berarti spasi hanya di data application/x-www-form-urlencoded. Nilai tambah literal harus berupa %2B atau dekoder bentuk akan mengubahnya menjadi spasi.
Karakter apa yang tidak perlu dikodekan?
Kumpulan yang tidak dicadangkan: huruf, angka, tanda hubung, garis bawah, titik, dan tanda gelombang. Karakter tersebut tetap literal di kedua mode. Pengkodeannya masih berfungsi tetapi menambah panjang yang tidak perlu.
Bagaimana karakter non-ASCII dikodekan?
Mereka dikonversi ke byte UTF-8 terlebih dahulu, kemudian setiap byte dikodekan dalam persen. Satu karakter yang terlihat dapat menjadi beberapa rangkaian %HH. Decoding harus menggunakan UTF-8 untuk membangun kembali teks asli.
Apakah decoding dua kali memperbaiki URL yang rusak?
Hanya jika nilainya sengaja dikodekan dua kali. Jika tidak, pass kedua akan merusak urutan % literal yang merupakan bagian dari data. Dekode sekali, periksa, dan dekode lagi hanya ketika pola %25 menunjukkan lapisan kedua.
Apakah ini sama dengan Base64?
Tidak. Pengodean persen lolos dari karakter untuk URI. Base64 memetakan byte sembarang ke alfabet 64 karakter untuk transportasi dalam protokol teks. Gunakan masing-masing untuk tugasnya sendiri.
Apakah URL yang ditempel diunggah?
Tidak. Encoding dan decoding hanya dijalankan di browser. String kueri yang berisi token atau fragmen sesi tidak dikirimkan ke server oleh alat ini.
Ringkasan
Enkode dan Dekode URL persen mengkodekan dan mendekode teks berdasarkan aturan RFC 3986, dengan mode terpisah untuk URI lengkap dan komponen individual. Perlengkapan / dan ? menjadi %2F%20dan%20%3F dalam mode komponen. Spasi menggunakan %20 dalam konteks URI dan mungkin menggunakan + dalam pengkodean formulir, yang merupakan konvensi berbeda.
Karakter yang dicadangkan mempertahankan maknanya hanya jika dibiarkan literal sebagai struktur; menyandikannya saat menjadi payload. Semua pekerjaan tetap ada di perangkat.