Panduan

URL Encoding: Panduan Lengkap

URL encoding, juga dikenal sebagai percent-encoding, adalah mekanisme fundamental untuk merepresentasikan karakter khusus dalam URL. Memahami cara kerja URL encoding sangat penting untuk pengembangan web, pembuatan API, dan bekerja dengan query string. Panduan ini menjelaskan semua yang perlu Anda ketahui tentang encoding dan decoding URL dengan benar.

Apa itu URL Encoding?

URL (Uniform Resource Locators) dirancang untuk hanya menggunakan subset karakter ASCII yang terbatas. Karakter tertentu memiliki arti khusus dalam URL—misalnya, ? memisahkan path dari query string, & memisahkan parameter query, dan # menunjukkan fragment identifier. Ketika Anda perlu menyertakan karakter-karakter ini sebagai data aktual (bukan karakter kontrol), atau ketika Anda perlu menyertakan karakter yang tidak diizinkan dalam URL sama sekali, Anda harus meng-encode mereka. URL encoding mengkonversi karakter menjadi format yang dapat ditransmisikan dengan aman melalui internet. Mekanismenya sederhana: karakter yang tidak aman diwakili oleh tanda persen (%) diikuti oleh dua digit heksadesimal yang mewakili kode ASCII karakter. Misalnya, spasi menjadi %20, tanda ampersand (&) menjadi %26, dan tanda sama dengan (=) menjadi %3D. Karakter yang dicadangkan dalam URL memiliki tujuan sintaksis khusus: : / ? # [ ] @ (delimiters umum) dan ! $ & ' ( ) * + , ; = (delimiters sub-komponen). Karakter-karakter ini harus di-encode ketika digunakan secara literal dalam komponen URL. Misalnya, jika Anda ingin mencari "tom & jerry", query parameter harus menjadi ?q=tom%20%26%20jerry, bukan ?q=tom & jerry, yang akan salah ditafsirkan sebagai dua parameter terpisah. Karakter yang tidak dicadangkan (A-Z, a-z, 0-9, -, _, ., ~) tidak pernah perlu di-encode dan harus tetap tidak di-encode untuk keterbacaan. Karakter non-ASCII (seperti karakter Cina, Arab, emoji) harus di-encode menggunakan UTF-8 byte sequence mereka, dengan setiap byte di-encode sebagai percent-encoded triplet. Misalnya, karakter emoji 😀 (U+1F600) di-encode sebagai %F0%9F%98%80. Penting untuk dicatat bahwa bagian URL yang berbeda memiliki aturan encoding yang berbeda. Path URL (/path/to/resource) memiliki aturan yang berbeda dari query string (?key=value), yang memiliki aturan yang berbeda dari fragment identifier (#section). Inilah mengapa kebanyakan bahasa pemrograman menyediakan fungsi terpisah untuk meng-encode komponen URL yang berbeda.

Kapan Meng-encode URL

Parameter query string hampir selalu memerlukan encoding. Ketika membangun URL dengan input pengguna, setiap nilai parameter harus di-encode untuk mencegah karakter khusus merusak struktur URL. Jika pengguna mencari "price=$100", tanpa encoding (?q=price=$100), tanda dolar dan tanda sama dengan dapat menyebabkan masalah parsing. Di-encode dengan benar, ini menjadi ?q=price%3D%24100. Data formulir yang dikirimkan melalui POST dengan content-type application/x-www-form-urlencoded menggunakan aturan encoding yang sama dengan query string, dengan tambahan bahwa spasi dapat di-encode sebagai + bukan %20 (meskipun %20 juga valid dan lebih jelas). Segmen path URL mungkin memerlukan encoding jika berisi karakter khusus. Misalnya, jika Anda memiliki endpoint API yang menerima filename sebagai path parameter, file bernama "my file (1).txt" harus di-encode sebagai /files/my%20file%20%281%29.txt. Namun, ingat bahwa garis miring (/) adalah separator path dan biasanya tidak boleh di-encode dalam path—hanya encode jika sebenarnya bagian dari segment name. Fragment identifier (bagian setelah #) juga memerlukan encoding untuk karakter khusus. Ini biasanya digunakan untuk navigasi in-page atau state routing dalam aplikasi single-page. Saat membangun URL secara terprogram, selalu encode input pengguna dan data dinamis. Jangan pernah mengasumsikan data akan hanya berisi karakter aman. Ini tidak hanya tentang korektness fungsional—tidak meng-encode dengan benar dapat menyebabkan kerentanan keamanan seperti open redirect atau URL injection. Sebaliknya, jangan encode URL yang sudah di-encode—double-encoding adalah kesalahan umum yang menyebabkan URL yang salah format. Jika Anda tidak yakin apakah string sudah di-encode, decode dulu, kemudian encode. Atau gunakan library yang menangani ini untuk Anda.

Praktik Terbaik URL Encoding

Gunakan fungsi encoding bawaan bahasa Anda daripada implementasi manual. JavaScript memiliki encodeURIComponent() untuk encoding nilai parameter dan encodeURI() untuk encoding URL lengkap. Python memiliki urllib.parse.quote() dan quote_plus(). PHP memiliki urlencode() dan rawurlencode(). Fungsi-fungsi ini menangani semua edge case dan aturan encoding dengan benar. Pilih fungsi encoding yang tepat untuk konteks. Dalam JavaScript, gunakan encodeURIComponent() untuk encoding nilai parameter individual, bukan encodeURI(). encodeURI() tidak meng-encode karakter seperti & dan = yang valid dalam URL lengkap tetapi tidak dalam nilai parameter. Kebanyakan waktu saat membangun URL secara dinamis, Anda ingin encodeURIComponent(). Encode pada tingkat yang tepat saat membangun URL. Encode setiap nilai parameter secara individual sebelum menggabungkannya menjadi query string. Jangan encode seluruh query string sebagai satu unit—ini akan meng-encode & dan = yang memisahkan parameter, membuat seluruh query string menjadi satu nilai. Perhatikan spasi. Dalam query string, spasi dapat di-encode sebagai %20 atau +. Keduanya valid, tetapi %20 lebih universal dan tidak ambigu. Beberapa sistem tua mungkin memerlukan +, jadi perhatikan persyaratan sistem Anda. Untuk API dan URL modern, lebih baik konsistensi. Standardkan pada satu pendekatan encoding di seluruh aplikasi Anda. Dokumentasikan bagaimana URL harus diformat, terutama jika API Anda dikonsumsi oleh klien eksternal. Validasi URL yang di-decode. Setelah decoding URL atau parameter, validasi bahwa isinya apa yang Anda harapkan. Jangan pernah langsung gunakan input yang di-decode dalam query database atau perintah sistem tanpa validasi dan sanitasi yang tepat—ini adalah vektor untuk serangan injection. Saat men-debug masalah URL, gunakan tool decoding untuk melihat apa yang sebenarnya dikirim. URL yang di-encode dapat sulit dibaca, dan men-decode mereka sering mengungkapkan masalah yang tidak langsung terlihat. Untuk pengembangan API REST, pertimbangkan menggunakan kebijakan encoding yang konsisten dan dokumentasikan dengan jelas. Beberapa API mengharapkan nilai tertentu di-encode dalam path, yang lain di query parameter. Buat aturan Anda eksplisit dalam dokumentasi API.

Coba Alat

Encoder/Decoder URL

Encoder/Decoder URL

Pelajari Lebih Lanjut

FAQ

Encoder/Decoder URL

FAQ →