Alat yang Anda butuhkan, siap dipakai

Encoder dan Decoder URL

Tempel URL yang mengandung % di kolom encode, dan teks aslinya langsung terbaca di kolom kiri. Ketik teks di kolom kiri, dan hasil encode muncul sesuai aturan yang Anda pilih. URL dibedah per skema, host, path, dan nilai query, dan alat ini juga mengenali URL lama berbasis Windows-1252 serta nilai yang di-encode dua kali. Peta simbol dan hasil per fungsi di bawahnya menunjukkan di mana teks yang sama di-encode secara berbeda.

Terakhir diperbarui 2026-10-22Semua perhitungan terjadi di browser Anda
Contoh

    Peta simbol
    Tekan simbol untuk melihat hasilnya pada tiap aturan di bawah. Pindah dengan tombol panah.

    Hasil per bahasa dan fungsiTeks di kolom teks asli · tekan untuk menyalin

      Terakhir diperbarui 2026-10-22Masukan Anda tidak disimpan

      Standar ROBERINAlat yang Anda butuhkan,
      siap dipakai.
      • Jelas sekilasPosisi input dan hasil terlihat jelas.
      • Hasil lebih duluAngka utama tampil dulu; prosesnya hanya saat dibutuhkan.
      • Minta lebih sedikitTanpa pendaftaran atau data yang tidak perlu.

      Encode URL mengubah karakter menjadi % dan dua digit heksadesimal

      Di URL, hanya huruf, angka, dan beberapa simbol yang boleh ditulis apa adanya. Karakter lain diubah dulu menjadi byte, lalu setiap byte ditulis sebagai % diikuti dua digit heksadesimal. Cara ini disebut percent-encoding atau encode URL. Dalam UTF-8, huruf seperti 'é' berukuran 2 byte sehingga menjadi %C3%A9, sedangkan spasi menjadi %20 (atau + pada pengiriman form). Decode URL adalah kebalikannya: setiap %XX dikembalikan menjadi byte, lalu dibaca sebagai karakter.

      Teks yang sama bisa menghasilkan encode yang berbeda tergantung posisinya di URL. Teks yang akan dipakai sebagai satu nilai, misalnya kata kunci pencarian, harus ikut mengubah &, =, /, dan ?. Teks yang sudah berbentuk URL justru harus mempertahankan tanda pemisah itu agar tetap bisa dibuka. Alat ini langsung mengonversi berdasarkan kolom yang terakhir Anda ubah, membedah URL per bagian, serta mengenali URL lama dari situs berbasis Windows-1252 dan nilai yang di-encode dua kali. Encode URL bukan enkripsi, jadi siapa pun bisa mengembalikannya ke teks asli.

      Kapan URL perlu di-encode atau di-decode

      • URL yang ditempel penuh tanda %: URL di chat atau dokumen yang terlihat seperti nasi%20goreng%20%26%20sate… sulit dikenali. Tempel ke kolom encode, dan kata kunci serta path terbaca kembali.
      • Memasukkan kata kunci atau nama produk ke tautan: 'Nasi & Sate' atau 'C++' yang ditempel apa adanya membuat bagian setelah & dibaca sebagai parameter lain dan + dibaca sebagai spasi. Ubah dengan aturan satu nilai agar terkirim utuh.
      • Mengirim URL tujuan setelah login atau pembayaran: URL yang dimasukkan ke redirect_uri atau returnUrl harus di-encode seluruhnya agar tidak tercampur dengan URL luar.
      • Membuat tanda tangan API: tanda tangan OAuth 1.0 dan AWS Signature Version 4 mengharuskan hanya karakter unreserved RFC 3986 yang dibiarkan, dengan spasi ditulis %20. Selisih satu karakter saja membuat autentikasi gagal.
      • Membaca URL di log atau alat analitik: log server dan sumber kunjungan menyimpan URL dalam bentuk ter-encode. Untuk melihat kata kunci yang dipakai pengunjung, URL itu perlu di-decode.
      • Membaca URL dari situs atau form PHP lama: situs yang halamannya memakai Windows-1252 (ISO-8859-1) menulis 'café' sebagai caf%E9, sehingga decoder UTF-8 menampilkannya rusak.

      Cara memakai

      1. Decode: tempel URL atau nilai yang mengandung % di kolom Encode URL di sisi kanan. Aturan dipilih dari bentuk teks yang ditempel (URL utuh untuk URL, Form + jika ada + sebagai spasi), dan hasil decode muncul di kolom Teks asli di sisi kiri.
      2. Encode: ketik teks di kolom Teks asli di sisi kiri, lalu pilih aturan yang sesuai dengan tempat teks itu akan dipakai. Pilih 'Satu nilai' untuk kata kunci, nama file, atau URL tujuan; 'URL utuh' untuk URL lengkap; 'Form +' jika perlu hasil yang sama dengan form HTML; dan 'Ketat' untuk tanda tangan.
      3. Melihat bedah URL: jika isi kolom berupa URL atau query string, alat ini membaginya menjadi skema, host, path, nilai query, dan fragmen, lalu men-decode masing-masing. Jika di dalam nilai ada URL lain, tombol 'Decode URL ini' membukanya lagi. Pada teks beberapa baris, yang dibedah adalah baris tempat kursor berada.
      4. Encoding karakter: nilai bawaan adalah deteksi otomatis. Jika tidak terbaca sebagai UTF-8, teks dibaca sebagai EUC-KR, Shift_JIS, atau Windows-1252 yang paling cocok, dan hasilnya ditampilkan di samping. Untuk meng-encode bagi situs lama, pilih sendiri encodingnya.
      5. Peta simbol dan hasil per fungsi: tekan simbol untuk melihat hasilnya pada keempat aturan beserta alasannya. Hasil per bahasa dan fungsi adalah hasil teks di kolom Teks asli yang diubah dengan fungsi JavaScript, PHP, dan Python, dengan bagian yang berbeda dari aturan saat ini ditandai. Tekan satu baris untuk menyalin hasilnya.

      Empat aturan: apa yang dibiarkan

      Tiap aturan membiarkan simbol yang berbeda selain huruf dan angka. Jika hasilnya berbeda dari alat atau kode lain, penyebabnya biasanya perbedaan ini.

      Simbol yang dibiarkan dan penulisan spasi pada tiap aturan
      AturanSimbol yang dibiarkan (selain huruf dan angka)Spasi% yang sudah adaDipakai untuk · fungsi yang sama
      Satu nilai- _ . ! ~ * ' ( )%20Menjadi %25Nilai query, segmen path · JavaScript encodeURIComponent()
      URL utuhTanda pemisah : / ? # [ ] @ ! $ & ' ( ) * + , ; = dan - . _ ~ (beberapa berbeda menurut posisi)%20DibiarkanAddress bar, tautan · URL Standard di browser
      Form +* - . _+Menjadi %25Pengiriman form HTML · URLSearchParams, Java URLEncoder
      Ketat- . _ ~%20Menjadi %25OAuth 1.0, tanda tangan AWS · PHP rawurlencode()

      Keempat simbol pada aturan ketat ditetapkan RFC 3986 sebagai karakter unreserved, sehingga di-encode atau tidak, keduanya dianggap URL yang sama. Aturan satu nilai juga membiarkan ! ' ( ) * karena JavaScript mengikuti karakter unreserved dari RFC 2396, standar lama, dan URL Standard juga menetapkan himpunan ini secara terpisah sebagai himpunan component.

      Aturan Form + sama dengan URLSearchParams. Saat browser benar-benar mengirim form HTML, baris baru di kolom multibaris dikirim sebagai %0D%0A, sedangkan alat ini dan URLSearchParams membiarkannya sebagai %0A (diukur di Chromium 151).

      Per simbol

      Tabel ini merangkum bagaimana simbol yang sering membingungkan diubah pada tiap aturan. Kolom URL utuh mengacu pada posisi query di URL http atau https. Di peta simbol di atas alat, Anda bisa menekan ke-35 simbol satu per satu.

      Hasil konversi satu simbol pada tiap aturan
      SimbolSatu nilaiURL utuh (query)Form +KetatencodeURI()
      spasi%20%20+%20%20
      &%26&%26%26&
      =%3D=%3D%3D=
      +%2B+%2B%2B+
      /%2F/%2F%2F/
      ?%3F?%3F%3F?
      #%23#%23%23#
      %%25%%25%25%25
      ~~~%7E~~
      ****%2A*
      ''%27%27%27'
      !!!%21%21!
      é%C3%A9%C3%A9%C3%A9%C3%A9%C3%A9

      Aturan URL utuh membiarkan % agar %XX yang sudah di-encode tetap terjaga. Sebagai gantinya, jika ada karakter % yang sebenarnya, dua karakter setelahnya harus dicek apakah heksadesimal, sehingga alat ini memberi tahu jumlah % seperti itu. urlencode() PHP mirip aturan form, tetapi * juga menjadi %2A, sedangkan quote() Python sama dengan aturan ketat dengan tambahan / yang dibiarkan.

      %20 dan +: bagaimana spasi dibaca

      Menulis spasi sebagai + adalah aturan pengiriman form HTML (application/x-www-form-urlencoded). Di path, + hanyalah tanda plus. Di query pun, apakah menjadi spasi atau tetap plus bergantung pada fungsi yang dipakai penerima untuk men-decode. Jika plus yang sebenarnya ditulis %2B dan spasi ditulis %20, keduanya dibaca sama di mana pun.

      Hasil decode a+b%20c%2B menurut fungsi (diukur 2026-10-22)
      FungsiHasil+ menjadi spasi
      JavaScript decodeURIComponent()a+b c+Tidak
      JavaScript URLSearchParamsa b c+Ya
      PHP urldecode()a b c+Ya
      PHP rawurldecode()a+b c+Tidak
      Python unquote()a+b c+Tidak
      Python unquote_plus()a b c+Ya

      Alat ini hanya membaca + sebagai spasi pada aturan Form +. Jika Anda men-decode dengan aturan satu nilai atau ketat dan + masih ada, tombol 'Baca dengan aturan Form +' muncul di baris status. Aturan URL utuh membiarkan + demi menjaga struktur, dan bedah URL di bawahnya hanya men-decode nilai query dengan aturan form.

      Meng-encode URL utuh: perbedaan encodeURI dan browser

      encodeURI(), yang sering dipakai untuk URL utuh, membiarkan tanda pemisah tetapi juga mengubah % dan tidak memperlakukan domain secara khusus. Address bar browser mengikuti URL Standard: himpunan yang dipakai berbeda untuk path, query, dan fragmen, %XX yang sudah ada dibiarkan, dan domain IDN diubah menjadi Punycode. Aturan URL utuh di alat ini mengikuti cara browser.

      URL yang sama dengan encodeURI() dan URL Standard (aturan URL utuh)
      Teks asliencodeURI()URL utuh (URL Standard)
      https://example.com/a%20bhttps://example.com/a%2520bhttps://example.com/a%20b
      https://bücher.de/https://b%C3%BCcher.de/https://xn--bcher-kva.de/
      https://example.com/?q=[1]https://example.com/?q=%5B1%5Dhttps://example.com/?q=[1]
      https://example.com/?q=it'shttps://example.com/?q=it'shttps://example.com/?q=it%27s
      https://example.com/?next=https://b.com/?x=1&y=2https://example.com/?next=https://b.com/?x=1&y=2https://example.com/?next=https://b.com/?x=1&y=2

      Seperti pada baris terakhir, jika URL lain dimasukkan apa adanya ke dalam nilai, kedua cara tidak bisa memperbaikinya, karena URL luar membaca y=2 sebagai itemnya sendiri. URL dalam harus di-encode terpisah dengan aturan satu nilai, lalu ditempelkan seperti next=https%3A%2F%2Fb.com%2F%3Fx%3D1%26y%3D2. Jika menemukan nilai seperti itu pada aturan URL utuh, alat ini memberi tahu lewat baris status.

      Encode dua kali dan decode satu lapis

      Jika teks yang sudah di-encode di-encode lagi, % menjadi %25. Karena itu %20 menjadi %2520, lalu sekali decode menghasilkan %20 dan baru decode kedua menghasilkan spasi. Ini sering terjadi ketika framework atau library HTTP sudah meng-encode nilai secara otomatis, tetapi kode Anda mengubahnya sekali lagi. RFC 3986 bagian 2.4 juga menetapkan agar teks yang sama tidak di-encode atau di-decode dua kali.

      'kopi café' yang di-encode berulang dengan aturan satu nilai
      KaliHasilPanjang
      1 kalikopi%20caf%C3%A916 karakter
      2 kalikopi%2520caf%25C3%25A922 karakter
      3 kalikopi%252520caf%2525C3%2525A928 karakter

      Jika di kolom encode terlihat %25 diikuti dua digit heksadesimal, alat ini menduga teks di-encode dua kali dan menampilkan tombol 'Decode satu lapis lagi'. Tombol ini hanya mengubah %25XX menjadi %XX, sehingga tanda pemisah lain di URL tidak tersentuh. Namun, jika teks aslinya memang berisi tulisan '%20' itu sendiri, decode satu lapis lagi justru mengubah teks, jadi periksa dulu asalnya.

      URL lama yang di-encode dengan Windows-1252

      URL masa kini memakai UTF-8 sebagai dasar (RFC 3986 bagian 2.5), tetapi situs lama, misalnya halaman dan form PHP yang dibuat dengan Windows-1252 (mirip ISO-8859-1), meng-encode kata kunci dari form dengan byte itu juga. Satu huruf Eropa Barat hanya 1 byte, sehingga 'é' menjadi %E9. URL Standard juga menetapkan bahwa query URL http dan https diubah dengan encoding halaman, sedangkan path selalu dengan UTF-8.

      Encode UTF-8 dan Windows-1252 untuk karakter yang sama
      KarakterUTF-8Windows-1252
      é%C3%A9%E9
      ü%C3%BC%FC
      ç%C3%A7%E7
      €%E2%82%AC%80
      AAA

      Jika nilai Windows-1252 di-decode sebagai UTF-8, byte tidak cocok dan muncul �. Deteksi otomatis alat ini lebih dulu mencoba membaca sebagai UTF-8; jika gagal, ia membandingkan hasil bacaan EUC-KR, Shift_JIS, dan Windows-1252, lalu memilih yang paling banyak memuat karakter umum. Sebaliknya, untuk membuat nilai yang akan dikirim ke situs lama, pilih Windows-1252 sebagai encoding karakter. Karakter yang tidak ada di Windows-1252 (emoji, misalnya) ditulis seperti pada form browser, yaitu &#nomor; yang di-encode menjadi %26%23nomor%3B.

      Domain IDN diubah menjadi Punycode

      Domain (host) tidak memakai percent-encoding. Domain dengan huruf non-ASCII diubah menurut aturan nama domain internasional (IDNA) menjadi nama ASCII yang diawali xn-- (Punycode, RFC 3492). Aturan URL utuh hanya mengubah host dengan cara ini, sedangkan huruf non-ASCII di path dan query menjadi %XX. Saat decode, nama xn-- ditampilkan kembali sebagai huruf aslinya.

      Domain dan Punycode
      DomainPunycode
      café.frxn--caf-dma.fr
      bücher.dexn--bcher-kva.de
      españa.esxn--espaa-rta.es
      例え.jpxn--r8jz45g.jp

      Dengan kode

      // JavaScript
      encodeURIComponent('Nasi & Sate / C++');       // Nasi%20%26%20Sate%20%2F%20C%2B%2B
      decodeURIComponent('kopi%20caf%C3%A9');         // kopi café (URIError jika ada % yang tidak valid)
      new URLSearchParams({ q: 'nasi goreng' }).toString(); // q=nasi+goreng
      new URL('https://café.example/menu').href;      // https://xn--caf-dma.example/menu
      
      # Python
      from urllib.parse import quote, quote_plus, unquote, urlencode
      quote('kopi café', safe='')                      # kopi%20caf%C3%A9
      quote_plus('kopi café')                          # kopi+caf%C3%A9
      unquote('caf%E9', encoding='cp1252')             # café (Windows-1252)
      urlencode({'q': 'nasi goreng', 'page': 2})       # q=nasi+goreng&page=2
      
      // PHP
      rawurlencode('kopi café');   // kopi%20caf%C3%A9
      urlencode('kopi café');      // kopi+caf%C3%A9
      http_build_query(['q' => 'nasi goreng', 'page' => 2]);
      
      // Java
      URLEncoder.encode("kopi café", StandardCharsets.UTF_8);  // kopi+caf%C3%A9
      URLDecoder.decode("kopi+caf%C3%A9", StandardCharsets.UTF_8); // kopi café

      Fungsi beraturan form (URLSearchParams, quote_plus() Python, urlencode() PHP, dan URLEncoder Java) menulis spasi sebagai +. Untuk nilai yang akan masuk ke path atau dipakai untuk tanda tangan, gunakan fungsi yang menghasilkan %20.

      Kesalahan yang sering terjadi

      • URL utuh di-encode dengan aturan satu nilai: hasilnya https%3A%2F%2F… dan tidak bisa dibuka sebagai tautan. Pakai aturan URL utuh untuk memperbaiki URL itu sendiri, dan aturan satu nilai hanya jika URL itu menjadi nilai di URL lain.
      • & atau # di dalam nilai dibiarkan: pada 'A&B', hanya A yang terkirim, dan bagian setelah # tidak dikirim ke server. Dengan aturan satu nilai, hasilnya A%26B dan %23.
      • C++ berubah menjadi 'C' dan dua spasi: penyebabnya, + dimasukkan apa adanya ke sisi yang men-decode dengan aturan form. Tulis C%2B%2B.
      • Di-encode dua kali seperti %2520: sering terjadi karena nilai yang sudah di-encode oleh library di-encode lagi secara manual. Tetapkan satu tahap saja untuk melakukan encode.
      • Nilai Windows-1252 di-decode sebagai UTF-8: huruf rusak atau muncul �. Ganti encoding karakter menjadi Windows-1252 lalu decode.
      • decodeURIComponent berhenti: jika setelah % tidak ada dua digit heksadesimal, seperti pada '100%', fungsi berhenti dengan URIError. Alat ini membiarkan % seperti itu dan memberi tahu posisinya.

      Batasan

      • Alat ini hanya menghitung perubahan karakter. Ia tidak memeriksa apakah URL benar-benar bisa dibuka atau aman, dan tidak mengakses URL itu.
      • Aturan URL utuh hanya menerapkan himpunan per komponen dari URL Standard. Perapian lain yang dilakukan browser (huruf kecil pada skema dan host, penyelesaian ../, penghapusan port bawaan, penambahan / pada path kosong) tidak dilakukan. Beberapa simbol bisa berbeda antarbrowser, misalnya Chrome 151 juga mengubah | di path menjadi %7C.
      • URL non-http dan non-https seperti mailto: juga diubah dengan himpunan path. Penanganan spasinya bisa berbeda dari aturan URL Standard untuk path semacam itu (opaque path).
      • Deteksi otomatis hanyalah perkiraan. Nilai yang pendek atau karakter yang jarang muncul bisa terbaca sebagai encoding lain, jadi pilih sendiri jika hasilnya aneh. Encoding lama yang didukung hanya EUC-KR, Shift_JIS, dan Windows-1252; EUC-JP, Big5, dan lainnya tidak ada.
      • Bedah URL hanya membaca dan menyalin. Untuk mengubah atau menambah item query, gunakan alat tabel query URL ↔ item. Hasil per bahasa dan fungsi hanya membandingkan 4.000 karakter pertama teks asli.

      Acuan: himpunan encode mengacu pada URL Standard (edisi 19 Oktober 2026) dan RFC 3986, aturan tanda tangan pada RFC 5849 dan dokumentasi AWS, dan perilaku fungsi pada dokumentasi tiap bahasa, semuanya dicek pada 22 Oktober 2026. Nilai di tabel dipastikan sama dengan alat ini serta PHP 8.5, Python 3.14, Node.js 26, dan Chromium 151.

      Sumber

      Pertanyaan yang sering diajukan

      Apa itu encode dan decode URL?

      Encode URL adalah menulis karakter yang tidak boleh langsung dipakai di URL sebagai % diikuti dua digit heksadesimal untuk tiap byte, dan decode adalah mengembalikan tulisan itu menjadi karakter asli. Huruf 'é' berukuran 2 byte dalam UTF-8, jadi menjadi %C3%A9 dan kembali menjadi 'é' saat di-decode. Ini hanya cara penulisan, bukan enkripsi, sehingga siapa pun bisa mengembalikannya.

      Apa beda encodeURI dan encodeURIComponent?

      encodeURIComponent dipakai untuk satu nilai, jadi tanda pemisah seperti & = / ? # : juga diubah, sedangkan encodeURI dipakai untuk URL utuh dan membiarkan simbol itu. Karena itu, jika kata kunci 'A&B' di-encode dengan encodeURI, tanda & tetap ada dan nilainya terbelah dua. encodeURI juga mengubah %20 yang sudah ada menjadi %2520, jadi untuk URL utuh aturan 'URL utuh' (URL Standard) di alat ini lebih aman.

      Spasi itu %20 atau +?

      Keduanya dipakai. Di path dan sebagian besar nilai, spasi adalah %20, sedangkan pengiriman form HTML dan URLSearchParams menulis spasi sebagai +. Saat decode pun, decodeURIComponent, rawurldecode PHP, dan unquote Python membiarkan +, sedangkan URLSearchParams, urldecode PHP, dan unquote_plus Python membacanya sebagai spasi. Jika plus yang sebenarnya ditulis %2B dan spasi ditulis %20, tidak akan ada kebingungan di mana pun.

      Mengapa % berubah menjadi %25 sehingga muncul %2520?

      Karena teks yang sudah di-encode di-encode sekali lagi. % adalah penanda encoding, sehingga karakter % menjadi %25 dan %20 menjadi %2520. RFC 3986 juga menetapkan agar teks yang sama tidak di-encode atau di-decode dua kali. Jika nilai yang ditempel di kolom encode memuat %25, tombol 'Decode satu lapis lagi' bisa melepasnya satu lapis demi satu lapis.

      Hasil decode berantakan atau muncul �. Mengapa?

      Kemungkinan besar nilai itu dibuat dengan encoding selain UTF-8. Situs lama berbasis Windows-1252 menulis 'café' sebagai caf%E9, dan jika dibaca sebagai UTF-8, hasilnya rusak. Jika tidak terbaca sebagai UTF-8, alat ini memilih EUC-KR, Shift_JIS, atau Windows-1252 yang paling cocok, dan Anda juga bisa memilihnya sendiri di kolom encoding karakter.

      Apakah domain IDN juga di-encode dengan %?

      Tidak. Domain tidak memakai percent-encoding, melainkan nama ASCII berawalan xn-- hasil konversi Punycode. café.fr menjadi xn--caf-dma.fr. Aturan 'URL utuh' hanya mengubah domain menjadi Punycode, sedangkan huruf non-ASCII di path dan query menjadi %XX.

      Bagaimana memasukkan URL lain sebagai nilai query?

      Encode URL dalam itu seluruhnya dengan aturan 'Satu nilai', lalu tempelkan. https://b.com/?x=1&y=2 menjadi https%3A%2F%2Fb.com%2F%3Fx%3D1%26y%3D2, sehingga setelah redirect= tanda & ? # tidak dibaca sebagai pemisah URL luar. Di bedah URL, alat ini menemukan URL di dalam nilai, dan tombol 'Decode URL ini' membukanya lagi.

      Apakah URL yang saya masukkan dikirim ke server?

      Tidak. Encode, decode, bedah URL, dan konversi domain semuanya dihitung di dalam browser ini. Teks yang Anda masukkan tidak dikirim atau disimpan di server dan tidak ditinggalkan di alamat halaman. Meskipun URL berisi kata sandi atau token, datanya tidak keluar dari halaman ini.