Encoder URL
Percent-encode teks agar bisa dikirim dengan aman di dalam URL, sepenuhnya di browser Anda.
Berjalan sepenuhnya di browser Anda. Tidak ada yang diunggah, dicatat, atau disimpan.
URL punya tata bahasa, dan karakter yang menjadi bagiannya —"?", "&", "/", "#", spasi— harus di-escape jika merupakan bagian dari sebuah nilai, bukan dari strukturnya. Escape itulah yang disebut percent-encoding.
Cara kerja
Setiap karakter yang tidak termasuk himpunan tak-tercadang RFC 3986 —huruf, angka, "-", ".", "_", dan "~"— diganti dengan tanda persen dan nilai heksadesimal dari setiap byte UTF-8-nya. Spasi menjadi %20 dan huruf beraksen menjadi dua escape, karena dalam UTF-8 huruf itu terdiri dari dua byte.
Gaya data formulir ada karena pengiriman formulir HTML lebih tua dari aturan itu: di sana spasi adalah "+" dan "~" juga di-escape. Pilih gaya ini saat Anda menyusun body application/x-www-form-urlencoded, dan gaya komponen untuk semua keperluan lainnya.
Contoh
| Kasus | Masukan | Hasil |
|---|---|---|
| Frasa pencarian yang dimasukkan ke query string | coffee & cake | coffee%20%26%20cake |
| Frasa yang sama sebagai data formulir | coffee & cake | coffee+%26+cake |
Pertanyaan umum
Haruskah saya mengenkode seluruh URL dengan ini?
Tidak. Mengenkode URL lengkap juga akan meng-escape "://" dan pemisahnya, dan Anda akan mendapat string yang tidak bisa diikuti oleh klien mana pun. Enkode nilai-nilainya secara terpisah, lalu susun URL dengan nilai-nilai itu.
Mengapa "!" dienkode di sini, sedangkan konsol browser saya membiarkannya?
encodeURIComponent di JavaScript sengaja melewatkan "!", "'", "(", ")", dan "*" meskipun RFC 3986 mencadangkannya. Mengenkodenya selalu diterima dan mencegah kejutan dengan parser yang lebih ketat, jadi alat ini melakukannya.
Bagaimana dengan "#" untuk fragmen?
"#" literal di dalam sebuah nilai harus dienkode sebagai %23; jika tidak, semua yang ada di belakangnya dibaca sebagai fragmen dan tidak pernah sampai ke server.
Perlu diketahui
- Semuanya terjadi di browser Anda. Apa yang Anda tempel tidak diunggah, tidak dicatat, dan tidak disimpan.