UltKit

Encode & Decode URL

Buat teks aman untuk dimasukkan ke URL, atau ubah urutan bergaya %20 kembali menjadi karakter yang dapat dibaca. Alat ini memakai encodeURIComponent, encodeURI, dan decodeURIComponent milik browser Anda sendiri, menampilkan parameter query dalam tabel, dan tidak mengirim apa pun ke server.

Mode

0 karakter · 0 kata · 0 baris

0 karakter · 0 kata · 0 baris

Berjalan sepenuhnya di tab browser ini. Teks Anda tidak pernah diunggah atau disimpan.

Apa yang di-escape setiap fungsi

Dihitung dengan fungsi browser itu sendiri. encodeURIComponent tidak mengubah huruf, angka, dan tanda-tanda berikut: ! ' ( ) * - . _ ~

KarakterencodeURIComponentencodeURI
(spasi)%20%20
!!!
"%22%22
#%23#
$%24$
%%25%25
&%26&
'''
(((
)))
***
+%2B+
,%2C,
/%2F/
:%3A:
;%3B;
=%3D=
?%3F?
@%40@
[%5B%5B
]%5D%5D
{%7B%7B
}%7D%7D
|%7C%7C
\%5C%5C
^%5E%5E
`%60%60
<%3C%3C
>%3E%3E
~~~
---
___
...
é%C3%A9%C3%A9
€%E2%82%AC%E2%82%AC
😀%F0%9F%98%80%F0%9F%98%80

Percent-encoding dan karakter khusus RFC 3986

URL hanya boleh berisi sekumpulan karakter ASCII yang terbatas. RFC 3986, spesifikasi sintaks URI tahun 2005, membaginya menjadi dua kelompok. Karakter unreserved, yaitu A–Z, a–z, 0–9, dan empat tanda - . _ ~, tidak pernah perlu di-encode. Karakter reserved memiliki tugas: pembatas umum : / ? # [ ] @ memisahkan skema, host, path, query, dan fragmen, sedangkan sub-pembatas ! $ & ' ( ) * + , ; = memisahkan item di dalamnya, seperti & dan = dalam query string. Semua karakter lain, serta karakter reserved yang dipakai sebagai data biasa, harus di-percent-encode.

Percent-encoding menuliskan satu byte sebagai % diikuti dua digit heksadesimal. Teks terlebih dahulu diubah menjadi UTF-8, sehingga spasi menjadi %20, é (dua byte) menjadi %C3%A9, dan emoji menjadi empat kelompok %XX. Itulah sebabnya pencarian "café & bar" muncul di tautan sebagai caf%C3%A9%20%26%20bar: tanda & di-encode agar server tidak membacanya sebagai awal parameter baru.

encodeURIComponent, encodeURI, dan decoding

encodeURIComponent adalah pilihan yang tepat untuk satu bagian, seperti nilai query, segmen path, atau URL redirect yang dikirim sebagai parameter. Fungsi ini meng-escape semuanya kecuali karakter unreserved dan ! ' ( ) *, yang dibiarkan JavaScript karena alasan historis. encodeURI (seluruh URL) menganggap inputnya sudah berupa alamat lengkap dan membiarkan karakter reserved tetap utuh, sehingga pada https://example.com/a b?q=1 hanya spasinya yang di-encode. Memakai encodeURI pada nilai parameter adalah bug klasik: & atau # di dalam nilai akan lolos dan merusak URL.

Decode membalik kedua fungsi tersebut. Formulir HTML yang dikirim dengan GET memakai format lama application/x-www-form-urlencoded, yang menuliskan spasi sebagai + alih-alih %20; biarkan Perlakukan + sebagai spasi tercentang untuk input seperti itu, dan hapus centangnya jika tanda plus harfiah penting, misalnya pada nomor telepon. Jika input berisi % yang tidak diikuti dua digit hex, atau byte yang bukan UTF-8 valid, decoding gagal dengan pesan yang jelas alih-alih menebak. Jika teks berisi query string, parameternya ditampilkan dalam bentuk ter-decode di tabel di bawah alat. Untuk data biner di URL, Base64url adalah alternatif yang umum.

Pertanyaan yang sering diajukan

Apakah spasi di URL ditulis %20 atau tanda plus?
Di path dan menurut RFC 3986, spasi adalah %20. Bentuk + hanya berarti spasi di dalam query string yang di-encode seperti cara formulir HTML meng-encode-nya, sehingga %20 adalah pilihan aman di mana pun.
Mengapa URL saya berisi %2520?
URL tersebut di-encode dua kali. Proses pertama mengubah spasi menjadi %20, dan proses kedua meng-encode % itu sendiri menjadi %25. Decode sekali untuk menghapus lapisan tambahan, dan encode nilai hanya di satu titik dalam kode Anda.
Karakter URL apa yang tidak pernah perlu di-percent-encode?
Himpunan unreserved dari RFC 3986: huruf A sampai Z dalam huruf besar maupun kecil, digit 0 sampai 9, serta tanda hubung, titik, garis bawah, dan tilde.
Bisakah URL berisi huruf non-Latin tanpa di-encode?
Browser menampilkannya, tetapi saat dikirim, setiap karakter non-ASCII di path atau query dikirim sebagai UTF-8 yang di-percent-encode. Nama domain memakai sistem terpisah, Punycode, yang mengubahnya menjadi label xn--.
Mengapa decode URL melaporkan urutan yang rusak?
Teks berisi % yang tidak diikuti dua digit heksadesimal, seperti "100%" harfiah, atau byte-nya menghasilkan UTF-8 yang tidak valid saat di-decode. Encode tanda % yang tersesat menjadi %25 sebelum decoding.