URL encoder dan decoder

Acrafto Team Pengembang
Diperbarui
Encode sebagai

Untuk satu nilai query atau segmen path. Meng-encode semuanya kecuali huruf, angka, dan - _ . ! ~ * ' ( ), sama seperti encodeURIComponent.

Hasil

Semuanya berjalan di peramban Anda dan tidak ada yang Anda tempel diunggah. Ini penting, karena URL sering membawa token dan ID sesi.

URL encode dan decode teks online saat Anda mengetik: alat ini mengubah spasi, huruf beraksen, dan simbol seperti & atau ? menjadi urutan percent-encoding seperti %20, lalu mengembalikannya menjadi teks yang terbaca. Tab kedua adalah URL parser. Tab ini memecah alamat apa pun menjadi protokol, host, path, dan parameter query yang bisa Anda edit, nonaktifkan, atau bersihkan dari tag pelacakan, lalu menulis kembali URL yang ter-encode dengan benar. Semuanya berjalan di peramban Anda.

Cara URL encode dan decode teks

  1. Ketik atau tempel ke kolom di tab Encode / Decode. Hasil diperbarui setiap kali Anda mengetik.
  2. Pilih Arah. Encode membuat teks aman untuk URL, Decode mengubah caf%C3%A9%20au%20lait kembali menjadi café au lait. Jika Anda menempel teks dengan urutan seperti %20 ke kolom kosong, alat otomatis beralih ke Decode (Encode saja mengembalikannya). Teks biasa yang perlu di-encode, bila ditempel dalam mode Decode, beralih ke Encode dengan cara yang sama, lewat Decode saja.
  3. Saat meng-encode, pilih di bawah Encode sebagai jenis teksnya (lihat bagian berikut). Pilihan bawaan, Nilai parameter, cocok untuk satu nilai query.
  4. Salin menaruh hasil di papan klip. Tukar memindahkan hasil ke input dan membalik arahnya. Ini cara cepat untuk memeriksa bolak-balik: men-decode teks yang baru Anda encode harus menghasilkan teks asli Anda.

Setiap karakter yang diubah alat ini disorot di hasil. Arahkan kursor ke salah satunya untuk melihat karakter, code point Unicode, dan byte-nya, misalnya é U+00E9 %C3%A9. Di bawah kolom terlihat jumlah Karakter, Byte UTF-8, dan Karakter ter-encode (atau Karakter ter-decode). Coba contoh memuat kalimat Harga: diskon 50 %, café & crème brûlée? Ya!, yang berisi 44 karakter tetapi 48 byte UTF-8, karena setiap huruf beraksen memakai dua byte.

Saat meng-encode, Setiap baris terpisah meng-encode tiap baris sendiri-sendiri dan mempertahankan baris baru, cocok untuk daftar nilai atau tautan. Tanpa opsi ini, baris baru ikut di-encode dan menjadi %0A. Jika teksnya adalah URL dengan parameter, alat menawarkan Pecah menjadi bagian, yang membuka alamat itu di tab parser.

Encode parameter URL, URL lengkap, atau data formulir

Tidak setiap karakter harus di-encode di mana pun. Garis miring memisahkan folder dalam path, tetapi hanya data biasa di dalam nilai parameter, jadi hasil yang benar bergantung pada apa yang Anda encode. Encode sebagai menawarkan empat mode:

  • Nilai parameter bekerja seperti encodeURIComponent di JavaScript dan cocok untuk satu nilai query atau segmen path. Mode ini meng-encode semuanya kecuali huruf, angka, dan - _ . ! ~ * ' ( ), sehingga &, =, /, atau ? di dalam nilai tidak bisa merusak URL. Meng-encode café & crème menghasilkan caf%C3%A9%20%26%20cr%C3%A8me, siap dipakai setelah q=.
  • URL lengkap untuk alamat utuh yang hanya perlu dirapikan. Mode ini meng-encode spasi, karakter non-ASCII, karakter kontrol, tanda petik terbalik, dan " < > \ ^ { | }, serta mempertahankan semua yang memberi struktur pada URL: : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Jadi https://example.com/search?q=café au lait&lang=fr menjadi https://example.com/search?q=caf%C3%A9%20au%20lait&lang=fr. Urutan yang sudah ter-encode dibiarkan, dan % tunggal menjadi %25. Di sinilah bedanya dengan encodeURI di JavaScript, yang mengubah %20 yang sudah ada menjadi %2520 dan meng-encode tanda kurung siku alamat IPv6 seperti http://[2001:db8::1]:8080/.
  • Data formulir mengikuti format application/x-www-form-urlencoded (dalam bahasa Inggris) yang dihasilkan formulir HTML dan URLSearchParams. Spasi menjadi +, dan hanya huruf, angka, serta * - . _ yang tidak di-encode, jadi ! ' ( ) ~ ikut di-encode.
  • RFC 3986 ketat hanya membiarkan karakter unreserved dari RFC 3986 (dalam bahasa Inggris) tanpa di-encode: huruf, angka, dan - . _ ~. OAuth 1.0 (RFC 5849) dan AWS Signature Version 4 mewajibkan bentuk persis ini, karena tanda tangan hanya cocok bila kedua pihak meng-encode ! atau * dengan cara yang sama.

Karakter yang sama di setiap mode:

KarakterNilai parameterURL lengkapData formulirRFC 3986 ketat
spasi%20%20+%20
&%26&%26%26
/%2F/%2F%2F
+%2B+%2B%2B
~~~%7E~
!!!%21%21
****%2A
é%C3%A9%C3%A9%C3%A9%C3%A9

Teks selalu di-encode sebagai UTF-8 dan digit heksadesimalnya selalu huruf kapital. Jika input sudah berisi urutan seperti %20, sebuah catatan memberi tahu dan menawarkan Decode saja, supaya Anda tidak tanpa sengaja meng-encode teks dua kali.

Untuk mengirim JSON dalam parameter query, minify dulu di JSON formatter lalu encode sebagai Nilai parameter: {"id":7,"tags":["a","b"]} menjadi %7B%22id%22%3A7%2C%22tags%22%3A%5B%22a%22%2C%22b%22%5D%7D. Kebalikannya juga bisa: decode parameter di sini, lalu format di sana.

URL decode bermasalah: tanda plus, %2520, dan urutan rusak

Decode biasanya langsung berhasil, tetapi ada empat situasi yang sering menjebak. Alat ini menanganinya satu per satu alih-alih berhenti dengan pesan galat:

  • Tanda plus berarti spasi dalam data formulir dan sebagian besar query string. Decode + sebagai spasi aktif secara bawaan, jadi caf%C3%A9+au+lait di-decode menjadi café au lait. Dalam URL lengkap, hanya tanda plus setelah ? yang dihitung sebagai spasi, karena di dalam path plus adalah karakter biasa. Matikan opsi ini bila tanda plus memang dimaksudkan apa adanya. Plus yang di-encode sebagai %2B selalu tetap menjadi tanda plus.
  • Double encoding terjadi ketika dua lapisan kode sama-sama meng-encode nilai yang sama, dan RFC 3986 secara eksplisit memperingatkan hal ini. Setiap % menjadi %25, sehingga spasi berubah dari %20 menjadi %2520. Jika hasil decode masih berisi urutan seperti %20, alat menyatakan teks kemungkinan di-encode dua kali dan menawarkan Decode lagi.
  • Urutan tidak valid, yaitu % yang tidak diikuti dua digit heksadesimal seperti pada 100% atau %G1, membuat decodeURIComponent di JavaScript melempar URIError. Di sini urutan seperti itu dibiarkan apa adanya, ditandai merah dan dihitung, sementara sisa teks tetap di-decode.
  • Tautan Latin-1 lama berasal dari masa sebelum UTF-8, ketika sebagian situs meng-encode é sebagai satu byte %E9. caf%E9 bukan UTF-8 yang valid, sehingga decodeURIComponent gagal dan unquote di Python mengembalikan caf diikuti karakter pengganti U+FFFD. Alat ini membaca byte seperti itu sebagai Windows-1252, men-decode caf%E9 menjadi café, dan menambahkan catatan tentang hal itu.

Karakter kontrol dalam teks hasil decode, seperti tab atau byte null, ditampilkan sebagai simbol yang terlihat seperti ␉ dan ␀, tetapi Salin menyalin teks yang sebenarnya.

URL parser: pecah URL dan edit parameter query

Tempel alamat ke kolom URL di tab Urai & edit URL dan alamat itu dipecah menjadi Protokol, Host, Port, Path, dan Fragmen, ditambah Nama pengguna dan Kata sandi bila URL memuatnya. Nilainya ditampilkan dalam bentuk ter-decode, jadi tab ini juga cara tercepat untuk men-decode parameter URL: Anda membaca sepatu lari alih-alih sepatu+lari. Pengeditan berlaku dua arah, seperti bilah alamat dan tabel parameter di Postman. Ubah satu kolom dan URL langsung ditulis ulang dengan encoding yang benar; ubah URL dan semua bagian dibaca ulang. Bagian yang tidak Anda sentuh tetap persis seperti semula, karakter demi karakter.

Tabel Parameter query mencantumkan setiap parameter dengan Nama dan Nilai-nya. Hapus centang Sertakan dalam URL untuk mengeluarkan parameter tanpa menghapusnya, yang berguna saat Anda mencari parameter yang merusak sebuah permintaan. Tambah parameter, Hapus parameter, dan Urutkan A ke Z melakukan persis seperti namanya. Nama yang berulang seperti tag=a&tag=b dan nama tanpa nilai seperti ?debug tetap dipertahankan. Spasi dalam parameter menentukan apakah spasi ditulis sebagai %20 atau +; secara bawaan mengikuti URL yang Anda tempel.

Tautan login dan pembayaran sering membawa URL kedua di dalam sebuah parameter, yang di-encode agar ? dan & miliknya tidak tercampur dengan yang di luar:

https://auth.example.com/authorize?client_id=abc&redirect_uri=https%3A%2F%2Fapp.example.com%2Fcallback%3Ftab%3D2

Nilai yang sendirinya berupa URL, biasanya di redirect_uri, return, url, atau next, mendapat tombol Edit URL di dalamnya. Alamat dalam https://app.example.com/callback?tab=2 terbuka sebagai tingkat tersendiri dengan bagian dan parameternya sendiri, breadcrumb (URL utama › redirect_uri) membawa Anda kembali, dan setiap perubahan di-encode kembali ke URL luar. Salin URL utama menyalin hasilnya. Ini berfungsi sampai beberapa tingkat ke dalam.

Jika bagian setelah # terlihat seperti parameter, seperti #access_token=...&state=... pada alur implisit OAuth atau #/search?q=shoes pada rute aplikasi satu halaman, tabel kedua, Parameter fragmen, mencantumkannya juga.

Parser juga menunjukkan masalah: URL tanpa protokol, yang oleh peramban dianggap tautan relatif; port di luar 0 sampai 65535; dan karakter yang harus di-encode, seperti spasi, huruf beraksen, ", atau <, yang diperbaiki oleh Encode karakter ini dalam satu langkah. Teks tanpa alamat, seperti a=1&b=2, dibaca sebagai query string. Untuk nama domain internasional (dalam bahasa Inggris) alat menampilkan bentuk Punycode yang dipakai DNS dan peramban, jadi münchen.de menjadi xn--mnchen-3ya.de, dan domain yang diawali xn-- ditampilkan dalam bentuk terbacanya.

Salin URL menyalin alamat yang sudah jadi, Buka membukanya di tab baru (hanya tautan http dan https), dan Salin sebagai JSON memberi Anda parameter sebagai objek JSON, dengan nama berulang dikumpulkan dalam array.

Hapus UTM dan parameter pelacakan lain dari URL

Tautan dari buletin, iklan, dan jejaring sosial membawa parameter yang hanya memberi tahu situs dari mana pengunjung datang. Parameter UTM (dalam bahasa Inggris) utm_source, utm_medium, utm_campaign, utm_term, dan utm_content berasal dari Urchin, pendahulu Google Analytics. ID klik seperti fbclid (Facebook), gclid (Google Ads), dan msclkid (Microsoft Advertising) ditambahkan oleh platform itu sendiri.

Parser menandainya dengan tag pelacakan, dan Hapus pelacakan (n) menghapus semuanya sekaligus. Selain parameter utm_*, alat ini mengenali lebih dari 20 lainnya, seperti ttclid (TikTok), mc_cid (Mailchimp), dan _hsenc (HubSpot). Parameter yang dibutuhkan halaman tetap di tempatnya: pada tautan toko dari Coba contoh, Hapus pelacakan (4) menghapus utm_source, utm_medium, utm_campaign, dan fbclid, lalu mempertahankan q, size, return, dan fragmen #reviews.

Tautan yang akan dimasukkan ke kode QR layak dibersihkan di sini terlebih dahulu. Tanpa parameter pelacakan tautannya lebih pendek, dan tautan yang lebih pendek menghasilkan kode yang kurang padat sehingga lebih mudah dipindai.

Apa itu percent-encoding dan bagaimana karakter menjadi %XX

Percent-encoding (dalam bahasa Inggris), juga disebut URL encoding, menulis sebuah karakter sebagai % diikuti dua digit heksadesimal. Sebuah URL hanya boleh berisi sejumlah terbatas karakter ASCII, dan sebagian punya tugas: ? memulai query, & memisahkan parameter, # memulai fragmen. RFC 3986 menyebutnya karakter reserved (: / ? # [ ] @ dan ! $ & ' ( ) * + , ; =). Huruf, angka, dan - . _ ~ bersifat unreserved dan tidak pernah perlu di-encode. Yang lain, dan setiap karakter reserved yang dipakai sebagai data biasa, harus di-encode.

Karakter di luar ASCII lebih dulu diubah menjadi byte UTF-8, dan setiap byte mendapat %XX sendiri:

  • é adalah U+00E9, yang disimpan UTF-8 sebagai dua byte C3 A9, jadi menjadi %C3%A9.
  • € adalah U+20AC, tiga byte: %E2%82%AC.
  • Emoji seperti U+1F600 (wajah menyeringai) memakai empat byte: %F0%9F%98%80.

%c3%a9 dan %C3%A9 berarti sama, tetapi RFC 3986 menyarankan huruf kapital, dan itulah yang ditulis alat ini. Tabel percent encoding untuk karakter yang paling sering Anda temui:

KarakterHasil encodeKarakterHasil encode
spasi%20+%2B
!%21,%2C
"%22/%2F
#%23:%3A
$%24;%3B
%%25=%3D
&%26?%3F
'%27@%40
(%28[%5B
)%29]%5D
*%2Abaris baru%0A

URL encode di JavaScript, Python, dan PHP

Setiap bahasa punya fungsi untuk ini, dan perbedaannya terutama pada cara memperlakukan spasi, garis miring, dan ! ' ( ) * ~.

JavaScript punya encodeURIComponent (dalam bahasa Inggris) untuk satu nilai, encodeURI untuk alamat utuh, dan URLSearchParams untuk form encoding:

encodeURIComponent("café & crème")                     // "caf%C3%A9%20%26%20cr%C3%A8me"
encodeURI("https://example.com/a b?q=café")            // "https://example.com/a%20b?q=caf%C3%A9"
new URLSearchParams({ q: "café & crème" }).toString()  // "q=caf%C3%A9+%26+cr%C3%A8me"
decodeURIComponent("caf%C3%A9")                        // "café"

decodeURIComponent tidak mengubah + menjadi spasi, dan melempar URIError pada urutan tidak valid seperti 100%.

Di Python, fungsinya ada di urllib.parse. quote mempertahankan / secara bawaan (safe='/') dan selain itu meng-encode semuanya kecuali karakter unreserved RFC 3986. quote_plus menulis spasi sebagai + dan meng-encode / juga:

from urllib.parse import quote, quote_plus, urlencode, unquote_plus

quote("café & crème/brûlée")       # 'caf%C3%A9%20%26%20cr%C3%A8me/br%C3%BBl%C3%A9e'
quote("a b/c", safe="")            # 'a%20b%2Fc'
quote_plus("café & crème/brûlée")  # 'caf%C3%A9+%26+cr%C3%A8me%2Fbr%C3%BBl%C3%A9e'
urlencode({"q": "café & crème", "page": 2})  # 'q=caf%C3%A9+%26+cr%C3%A8me&page=2'
unquote_plus("caf%C3%A9+au+lait")  # 'café au lait'

Di PHP, urlencode meng-encode seperti formulir HTML dan menulis spasi sebagai +, sedangkan rawurlencode mengikuti RFC 3986 dan menulis %20:

urlencode("café & crème");     // "caf%C3%A9+%26+cr%C3%A8me"
rawurlencode("café & crème");  // "caf%C3%A9%20%26%20cr%C3%A8me"

rawurlencode menghasilkan hasil yang sama dengan RFC 3986 ketat. urlencode sama dengan Data formulir kecuali untuk *, yang di-encode sebagai %2A.

Pertanyaan yang sering diajukan

Apakah spasi di-encode sebagai %20 atau +?

%20 berfungsi di mana saja dalam URL. Tanda + berarti spasi hanya di query string dan di data formulir, format yang dikirim formulir HTML. Dalam path, + adalah tanda plus biasa, jadi /a+b tetap /a+b. Bila nilai query membutuhkan tanda plus sungguhan, tulis sebagai %2B. Di alat ini, Data formulir menulis spasi sebagai + dan ketiga mode lainnya sebagai %20.

Apa arti %20, %2F, dan %3D dalam URL?

Itu adalah karakter yang di-encode: %20 adalah spasi, %2F garis miring, dan %3D tanda sama dengan. Yang sering Anda lihat lainnya adalah %26 (&), %3F (?), %3A (:), %2C (koma), dan %27 (apostrof). Kedua digit itu adalah kode karakter dalam heksadesimal. Huruf beraksen dan karakter non-ASCII lain memakai dua sampai empat pasang seperti itu, misalnya %C3%A9 untuk é. Tempel seluruh string ke decoder untuk membacanya.

Apa beda encodeURI dan encodeURIComponent?

encodeURI dimaksudkan untuk alamat utuh dan membiarkan karakter pembentuk strukturnya, seperti : / ? # & =. encodeURIComponent dimaksudkan untuk satu bagian, yaitu nilai parameter atau segmen path, dan meng-encode karakter itu juga, sehingga https://example.com/?a=1&b=2 menjadi https%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2. Di alat ini, Nilai parameter setara dengan encodeURIComponent, dan URL lengkap mirip encodeURI tetapi mempertahankan urutan yang sudah ada seperti %20 alih-alih mengubahnya menjadi %2520.

Bagaimana cara menghapus parameter UTM dari URL?

Tempel tautan ke tab Urai & edit URL lalu tekan Hapus pelacakan (n). Tombol ini menghapus setiap tag utm_* dan ID klik seperti fbclid dan gclid sekaligus. Setelah itu tekan Salin URL. Untuk membuang hanya sebagian, pakai Hapus parameter pada baris yang tidak Anda inginkan.

Apakah URL encoding sama dengan enkripsi atau Base64?

Tidak. URL encoding tidak menyembunyikan apa pun: siapa saja bisa men-decode caf%C3%A9 kembali menjadi café, jadi ini tidak pernah melindungi kata sandi atau token. Fungsinya hanya membuat karakter aman dipakai dalam alamat. Base64 adalah encoding lain yang mengubah data apa pun, termasuk file biner, menjadi string dari 64 karakter. String Base64 dalam URL tetap perlu meng-encode +, /, dan =, kecuali Anda memakai varian URL safe, yang bisa dihasilkan oleh encoder dan decoder Base64.

Apakah URL yang saya tempel diunggah atau disimpan?

Tidak. Encode, decode, dan parsing berjalan di peramban Anda, dan tidak ada yang Anda tempel dikirim ke server. Ini penting, karena URL sering membawa token akses, ID sesi, atau kode reset kata sandi. Peramban hanya mengingat tab dan opsi yang Anda pilih, tidak pernah teksnya. Satu-satunya yang memuat alamat adalah Buka, yang membukanya di tab baru persis seperti mengeklik tautan.

Alat lain untuk programmer ada di kategori Pengembang, dan alat yang mengubah satu format menjadi format lain dikumpulkan di Konverter. Untuk mencari perbedaan antara dua URL panjang, misalnya panggilan API yang berhasil dan yang gagal, tempel keduanya ke alat pembanding teks lalu bandingkan per karakter.

Saya akan menghargai jika Anda dapat membagikan halaman-halaman ini dengan teman, mem-bookmark, atau membuat tautan ke halaman ini. Terima kasih! 🙏