Langsung ke konten

Encode URL

Percent-encode teks agar tetap utuh di dalam URL. Ada tiga encoding berbeda untuk tiga keperluan berbeda, dan salah memilih adalah penyebab nilai rusak tanpa terlihat — jadi halaman ini memberi tahu mana yang Anda butuhkan.

  • Tidak pernah disimpan
  • Tanpa antre, tanpa menunggu
  • Tanpa daftar, tanpa watermark
Hasil encode

Hasil encode akan muncul di sini.

Cara kerjanya

1

Tempel teks Anda

Teks apa pun, dalam bahasa apa pun. Teks di-encode sebagai UTF-8, format yang diharapkan setiap server modern.

2

Pilih keperluannya

Satu nilai yang akan dimasukkan ke query string, URL utuh yang sudah tersusun, atau pengiriman formulir. Perbedaannya penting dan masing-masing dijelaskan.

3

Salin hasilnya

Encode baris demi baris jika ada daftar yang perlu diproses sekaligus.

Tiga jawaban yang benar, dan mengapa satu tombol itu salah

Percent-encoding mengganti sebuah karakter dengan % dan nilai byte-nya dalam heksadesimal. Spesifikasinya membagi karakter menjadi tiga kelompok, dan semua kebingungan seputar hal ini berasal dari situ. Karakter unreserved — huruf, angka, tanda hubung, titik, garis bawah, dan tilde — tidak pernah perlu di-encode. Karakter reserved — garis miring, tanda tanya, ampersand, tanda sama dengan, dan titik dua yang memberi struktur pada URL — harus di-encode *saat menjadi data* dan tidak boleh di-encode *saat menjadi struktur*. Semua karakter lainnya selalu di-encode.

Itulah sebabnya tidak ada satu jawaban yang benar. Meng-encode URL utuh harus membiarkan garis miring dan tanda tanya, kalau tidak alamatnya tidak lagi berfungsi sebagai alamat. Meng-encode nilai untuk dimasukkan ke parameter query harus meng-escape ampersand dan tanda sama dengan, kalau tidak nilai yang mengandung salah satunya terpecah menjadi dua parameter. Meng-encode segmen path harus meng-escape garis miring, kalau tidak nama file yang mengandung garis miring berubah menjadi dua direktori. Satu tombol Encode memilih salah satu dari ketiganya dan salah di dua pertiga kasus lainnya — biasanya tanpa terlihat, dan biasanya dengan cara yang baru muncul pada input yang tidak biasa.

Spasi adalah karakter dengan sejarah paling panjang. Di URL, spasi ditulis %20. Di formulir HTML yang dikirim, spasi ditulis +, yaitu encoding terpisah yang lebih lama dan tetap bertahan karena formulir sudah bekerja seperti itu sejak 1994. Keduanya benar dalam konteksnya masing-masing dan tidak ada yang benar dalam konteks lainnya, itulah sebabnya tanda plus di query string ambigu dengan cara yang tidak bisa diperbaiki sehati-hati apa pun proses encoding-nya.

Teks non-ASCII di-encode sebagai UTF-8 terlebih dahulu lalu byte demi byte, jadi satu huruf beraksen menjadi dua rangkaian persen dan satu emoji menjadi empat. Double encoding adalah bug klasik: meng-encode sesuatu yang sudah ter-encode mengubah setiap % menjadi %25, sehingga %20 menjadi %2520 dan pihak penerima mendapat tanda persen harfiah. Jika sebuah URL penuh dengan %25, URL itu sudah melewati satu encoder terlalu banyak.

Jika Anda butuh hal lain

Di kode, gunakan fungsi bawaan bahasa pemrograman Anda dan pilih dengan sama cermatnya seperti yang diminta halaman ini. JavaScript punya encodeURI untuk alamat utuh dan encodeURIComponent untuk nilai; Python punya urllib.parse.quote dengan argumen safe yang secara default membiarkan garis miring; PHP membedakan rawurlencode dari urlencode, yang berbeda persis pada soal spasi versus plus di atas. Lebih baik lagi, susun URL dengan tipe URL alih-alih menggabungkan string, dan pertanyaan itu hilang dengan sendirinya.

Di command line, jq -rR @uri meng-encode dengan aman dan bisa menangani daftar, dan curl --data-urlencode menyusun parameter yang ter-encode dengan benar tanpa Anda perlu memikirkan sedang berada di kasus yang mana dari ketiganya — satu-satunya tempat hal ini benar-benar mudah.

Pertanyaan yang sering diajukan

Mana dari ketiganya yang sebaiknya saya pakai?

“Satu nilai” (component), hampir selalu. Gunakan saat Anda meng-encode SATU nilai yang akan dimasukkan ke query string atau segmen path — kata pencarian, alamat email, target redirect. Hanya opsi inilah dari ketiganya yang meng-escape &, =, ? dan /, dan justru itulah yang mencegah nilai Anda keluar dari parameternya dan menjadi dua parameter. Gunakan “URL utuh” hanya jika Anda sudah punya URL lengkap dan hanya ingin membersihkan karakter yang tidak aman; opsi ini sengaja membiarkan karakter struktural agar URL tetap menjadi URL. Gunakan “Data formulir” saat Anda menyusun body application/x-www-form-urlencoded, di mana spasi ditulis + bukan %20.

Mengapa "&" saya merusak URL?

Karena karakter itu tidak di-encode, dan & adalah cara query string memisahkan satu parameter dari parameter berikutnya. Nilai "Smith & Sons" yang ditambahkan mentah ke ?company= tiba di server sebagai company=Smith dan parameter kedua yang kosong bernama "Sons". Ini bug URL yang paling umum, dan encoding component adalah solusinya — & diubah menjadi %26 sehingga nilainya tetap satu nilai.

Mengapa "+" saya berubah menjadi spasi?

Karena di query string, + berarti spasi — aturan warisan formulir HTML yang tidak pernah bisa dihapus. Jadi tanda plus harfiah di data Anda, di nomor telepon atau string Base64, dibaca sebagai spasi oleh server penerima. Encoding component meng-escape-nya menjadi %2B, yang tiba dengan utuh.

Apakah alat ini menangani bahasa lain dan emoji?

Ya. Teks diubah menjadi UTF-8 terlebih dahulu lalu di-percent-encode byte demi byte, sesuai yang diwajibkan RFC 3986 dan yang diharapkan setiap server modern. Bahasa Jepang, Arab, huruf Latin beraksen, dan emoji semuanya kembali persis sama saat di-encode lalu di-decode.

Mengapa ! ' ( ) * di-encode di sini padahal alat lain membiarkannya?

Karena encodeURIComponent bawaan browser membiarkan kelima karakter itu, sedangkan RFC 3986 menggolongkannya sebagai reserved. Beberapa server dan framework memperlakukannya sebagai struktur, jadi nilai yang mengandungnya bisa salah dibaca. Meng-encode-nya tidak berbahaya — karakter itu ter-decode kembali dengan identik di mana saja — dan menghilangkan satu jenis bug yang jarang dan sulit dilacak. Inilah yang dilakukan implementasi yang cermat.

Apakah teks saya disimpan di suatu tempat?

Tidak. Tidak ada yang disimpan dan tidak ada permintaan yang dikirim. Anda bisa memutus koneksi internet setelah halaman dimuat dan alat ini tetap berfungsi.

Perlu diketahui: Ada tiga jawaban benar yang berbeda dan halaman ini meminta Anda memilih, karena satu tombol Encode yang biasa salah dua pertiga kali. Meng-encode URL utuh, parameter query, dan segmen path meng-escape karakter yang berbeda; memakai yang salah akan diam-diam merusak garis miring, tanda plus, atau ampersand.

Pasang alat ini di situs Anda

Gratis untuk blog, halaman kelas, atau artikel bantuan apa pun. Tempel satu potong kode dan pengunjung Anda bisa langsung memakainya di halaman Anda.