Tentang enkoding URL
URL hanya dapat berisi sekumpulan karakter ASCII yang terbatas. Karakter khusus seperti spasi, ampersand, dan huruf non-ASCII harus dikodekan secara persen — diganti dengan tanda persen diikuti dua digit heksadesimal. Misalnya, spasi menjadi %20.
Alat ini menggunakan encodeURIComponent, yang mengkodekan segalanya kecuali huruf, angka, dan - _ . ! ~ * ( ). Ini adalah fungsi yang tepat untuk mengkodekan nilai parameter string kueri atau segmen jalur, bukan seluruh URL.
Bagaimana cara meng-encode komponen URL dengan persen?
Untuk meng-encode teks dengan persen untuk digunakan dalam URL, ganti setiap karakter di luar set tidak dicadangkan (huruf, angka, dan - _ . ! ~ * ' ( )) dengan tanda persen diikuti dua digit heksadesimal yang mewakili nilai byte UTF-8 karakter tersebut. Contoh: "hello world" menjadi "hello%20world" dan "café" menjadi "caf%C3%A9".
Langkah meng-encode dan mendekode komponen URL dengan persen
- Konversi teks input menjadi byte UTF-8, karena karakter non-ASCII dapat direpresentasikan oleh lebih dari satu byte.
- Pindai setiap byte; jika sesuai dengan karakter tidak dicadangkan (A-Z, a-z, 0-9, - _ . ! ~ * ' ( )), biarkan tidak berubah.
- Untuk setiap byte lainnya, ganti dengan tanda persen diikuti nilai heksadesimal dua digit huruf besarnya, misalnya spasi (0x20) menjadi %20.
- Gabungkan hasilnya kembali menjadi satu string; inilah representasi yang di-encode persen dan aman-URL dari teks asli.
- Untuk mendekode, pindai % yang diikuti dua digit hex, konversi masing-masing kembali ke nilai byte-nya, dan susun ulang byte UTF-8 menjadi teks asli.
Aturan encoding persen
Byte dicadangkan/tidak aman -> %XX, dengan XX adalah nilai byte dalam dua digit heksadesimal huruf besar
- Karakter tidak dicadangkan = A-Z, a-z, 0-9, - _ . ! ~ * ' ( ) — tidak pernah di-encode
- %XX = tanda persen ditambah dua digit hex yang mewakili satu byte dari pengkodean UTF-8 karakter asli
Contoh hasil encoding
| Teks | Ter-encode |
|---|
| hello world | hello%20world |
| a=b&c=d | a%3Db%26c%3Dd |
| café | caf%C3%A9 |
| 100% off! | 100%25%20off! |
| user@example.com | user%40example.com |
Pertanyaan yang sering diajukan
Mengapa encodeURIComponent membiarkan ! ~ * ' ( ) tidak di-escape?
Karakter-karakter ini, bersama huruf, angka, dan - _ ., didefinisikan aman untuk muncul langsung dalam komponen URI dan tidak memiliki makna khusus di sana, sehingga encodeURIComponent JavaScript membiarkannya apa adanya. Fungsi lain seperti encodeURI mencadangkan set karakter yang berbeda dan lebih besar karena ditujukan untuk meng-encode seluruh URL, bukan satu komponen.
Apa perbedaan antara meng-encode komponen URL dan seluruh URL?
Meng-encode satu komponen (seperti nilai parameter kueri) harus meng-escape karakter seperti & dan = agar tidak disalahartikan sebagai struktur URL. Meng-encode seluruh URL harus membiarkan karakter struktural seperti :, /, ?, dan & tidak tersentuh agar URL tetap dapat diurai dengan benar, itulah sebabnya encodeURIComponent dan encodeURI berperilaku berbeda.
Mengapa spasi terkadang menjadi %20 dan terkadang +?
%20 adalah encoding persen umum untuk spasi yang digunakan di path URL dan output encodeURIComponent. Tanda + untuk spasi adalah konvensi lama khusus untuk format application/x-www-form-urlencoded yang digunakan dalam pengiriman formulir HTML dan query string, bukan aturan encoding URL umum.
Mengapa decoding gagal dengan error pada beberapa input?
Decoding gagal ketika % tidak diikuti dua digit heksadesimal yang valid, atau ketika byte hasil decode tidak membentuk UTF-8 yang valid — misalnya, menempelkan urutan persen yang tidak lengkap seperti %E2%9 tanpa byte terakhirnya. Periksa apakah input adalah teks yang di-encode persen dengan lengkap dan benar.
Alat ini meng-encode dan mendekode satu nilai teks menggunakan encodeURIComponent/decodeURIComponent JavaScript, sesuai dengan karakter tidak dicadangkan RFC 3986; tidak mengurai atau memvalidasi struktur URL lengkap (skema, host, path, query) sebagai komponen terpisah.
Sources: RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax
Privasi dan keamanan
- Dihitung di peramban — Semua yang Anda ketik dihitung di perangkat Anda sendiri dan tidak dikirim ke server utilduck.
- Koneksi terenkripsi — Semua halaman disajikan melalui HTTPS sehingga isinya tidak dapat dibaca di jaringan.
- Tidak dibagikan ke pihak ketiga — Masukan Anda tidak diteruskan ke layanan analitik maupun periklanan.
- Tidak disimpan — Hasil tidak disimpan di server mana pun dan tidak perlu membuat akun.
Terakhir diperbarui: 2026-08-17