URL Encode & Decode

Percent-encode teks untuk URL dan query string, atau decode URL ter-encode bergaya %20 kembali menjadi teks yang mudah dibaca.

Berjalan 100% di browser Anda. Apa pun yang Anda tempel tidak diunggah atau disimpan.
Teks atau URL ter-encode
Hasil
Siap.

Cara menggunakan URL encoder dan decoder

  1. Pilih Encode atau Decode.
  2. Pilih mode: Komponen untuk satu nilai query atau segmen path, atau URL lengkap untuk menjaga struktur URL (:, /, ?, &) tetap utuh.
  3. Tempel teks atau URL Anda dan salin hasilnya.

Semuanya diproses di browser Anda. URL sering membawa token dan data pribadi dalam query string, dan tidak satu pun yang diunggah atau disimpan.

Apa itu percent-encoding?

URL hanya boleh berisi sekumpulan terbatas karakter ASCII. Percent-encoding, yang didefinisikan dalam RFC 3986, merepresentasikan byte lainnya sebagai tanda persen diikuti dua digit heksadesimal. Teks pertama-tama diubah menjadi byte UTF-8, lalu setiap byte yang perlu di-escape ditulis sebagai %XX:

café & crème   →   caf%C3%A9%20%26%20cr%C3%A8me

Di sini é adalah dua byte UTF-8 (C3 A9), spasi menjadi %20 dan ampersand menjadi %26.

Karakter yang dicadangkan dan yang tidak dicadangkan

KelompokKarakterArti
Tidak dicadangkanA–Z a–z 0–9 - . _ ~Tidak pernah perlu di-encode.
Dicadangkan: gen-delims: / ? # [ ] @Memisahkan bagian-bagian utama URL.
Dicadangkan: sub-delims! $ & ' ( ) * + , ; =Membatasi data di dalam satu bagian, seperti & dan = dalam query string.

Karakter yang dicadangkan harus di-encode ketika muncul sebagai data dan bukan sebagai pembatas. Pencarian untuk R&D harus dikirim sebagai q=R%26D; kalau tidak, server melihat parameter kedua bernama D.

encodeURIComponent vs encodeURI

JavaScript menyediakan dua fungsi, dan memilih yang salah adalah sumber bug yang umum:

  • encodeURIComponent() meng-encode semuanya kecuali A–Z a–z 0–9 - _ . ! ~ * ' ( ). Gunakan untuk nilai individual: parameter query, segmen path, data fragment.
  • encodeURI() juga membiarkan ; , / ? : @ & = + $ # tidak tersentuh, sehingga bisa diterapkan pada URL lengkap tanpa merusak strukturnya. Fungsi ini tidak akan melindungi nilai yang mengandung & atau #.
encodeURI("https://example.com/a b?q=R&D")
// "https://example.com/a%20b?q=R&D"      (& dibiarkan)

"https://example.com/search?q=" + encodeURIComponent("R&D")
// "https://example.com/search?q=R%26D"

Lebih baik lagi, biarkan URLSearchParams atau pustaka URL bahasa pemrograman Anda yang membuat query string untuk Anda.

Jebakan umum

+ versus %20

Formulir HTML yang dikirim sebagai application/x-www-form-urlencoded meng-encode spasi sebagai +. Dalam URL RFC 3986, + adalah tanda plus literal dan spasi adalah %20. Decoder yang tidak tahu konvensi mana yang dipakai bisa mengubah C++ menjadi C atau membiarkan + menggantikan spasi. Encode tanda plus yang sebenarnya sebagai %2B agar aman.

Python:  urllib.parse.quote("a b&c")       → a%20b%26c
         urllib.parse.quote_plus("a b&c")  → a+b%26c

Double encoding

Meng-encode string yang sudah ter-encode akan meng-escape tanda persen itu sendiri: %20 menjadi %2520. Hal ini biasanya terjadi ketika suatu nilai di-encode oleh kode Anda dan sekali lagi oleh framework atau klien HTTP. Jika Anda melihat %25 dalam URL, curigai double encoding. Men-decode dua kali sama merusaknya: bisa mengubah %41 literal dalam data pengguna menjadi A.

Meng-encode seluruh URL sebagai komponen

Menjalankan encodeURIComponent pada URL lengkap meng-escape :// dan setiap /, menghasilkan https%3A%2F%2F.... Itu benar hanya ketika URL itu sendiri adalah nilai parameter, seperti redirect_uri.

Tips

  • Digit heksadesimal dalam percent-encoding tidak peka huruf besar-kecil, tetapi RFC 3986 menganjurkan huruf besar (%2F, bukan %2f).
  • Nama domain internasional tidak di-percent-encode; sebagai gantinya memakai Punycode (xn--).
  • Perlu mengirim data biner dalam URL? Base64 yang aman untuk URL lebih ringkas daripada mem-percent-encode setiap byte.
  • Periksa bagaimana server menangani permintaan ter-encode Anda dengan cek header HTTP.

Pertanyaan yang sering diajukan

Mengapa spasi kadang + dan kadang %20?

+ berasal dari encoding formulir HTML yang dipakai dalam query string dan body POST; %20 adalah encoding umum RFC 3986 yang valid di mana saja dalam URL. Jika ragu, gunakan %20.

Karakter apa yang tidak pernah perlu di-encode?

Kumpulan yang tidak dicadangkan: huruf, angka, tanda hubung, titik, garis bawah, dan tilde. Semua yang lain sebaiknya di-encode ketika menjadi bagian dari suatu nilai.

Apakah URL encoding merupakan langkah keamanan?

Bukan. Ini hanya membuat data aman secara sintaksis di dalam URL dan sepenuhnya dapat dibalik. Ini tidak menyembunyikan data atau mencegah injection dengan sendirinya.

Bagaimana cara men-decode URL dengan urutan %uXXXX?

%uXXXX adalah format nonstandar yang dihasilkan oleh fungsi JavaScript escape() yang sudah usang. Decoder standar menolaknya; format ini harus dikonversi secara terpisah.

Diperbarui

Tersalin ke clipboard