Panduan URL Encode dan Decode: Pengodean Persen, Spasi, dan UTF-8
ToolMellow ·
Pengodean URL merepresentasikan byte tertentu dengan escape persen agar teks sesuai untuk bagian URL atau nilai formulir yang dituju. ToolMellow menyediakan tiga gaya: Komponen URL, Nilai formulir, dan URL lengkap. Tempel teks, pilih gaya, lalu tekan Enkode atau Dekode. Konversi berjalan secara lokal dan tidak membuka alamat, tidak mengambilnya melalui jaringan, serta tidak memvalidasinya.
Hasil yang tepat bergantung pada tujuan penggunaan teks. Satu nilai kueri, string kueri lengkap, dan URL yang sudah dirangkai merupakan input berbeda. Panduan ini memberikan contoh tepat, menjelaskan UTF-8 dan kesalahan umum, serta membantu menghindari perubahan pemisah atau dekode lebih banyak lapisan daripada yang dimaksud. Alamat dan hasil contoh adalah ilustrasi, bukan sumber daya yang diambil.
Cara mengenkode atau mendekode teks URL
Buka URL encode & decode lalu tempel seluruh nilai yang ingin diubah. Pada Gaya pengodean, pilih Komponen URL (%20 untuk spasi), Nilai formulir (+ untuk spasi), atau URL lengkap (pertahankan pemisah). Enkode dan Dekode memproses seluruh input editor; mengetik saja tidak mengonversinya.
Baca output sebelum menggunakan Salin hasil atau Unduh. Gunakan hasil sebagai input memungkinkan operasi lain jika hasil masih memenuhi batas input. Mengubah input atau gaya pengodean menghapus hasil lama. Bungkus baris hanya mengubah pembungkusan tampilan; tidak menyisipkan baris baru dan tidak mengubah escape persen.
- Untuk satu nilai kueri atau segmen jalur, pilih mode komponen daripada mengenkode seluruh kueri yang sudah dirangkai.
- Gunakan mode nilai formulir hanya ketika format penerima mengharapkan aturan nilai application/x-www-form-urlencoded.
- Untuk alamat yang sudah dirangkai dan pemisahnya harus tetap bermakna, pertimbangkan mode URL lengkap; mode ini tetap bukan pengurai atau validator URL.
Pilih komponen, nilai formulir, atau URL lengkap
Mengenkode komponen mencegah tanda baca yang dicadangkan dalam nilai berfungsi sebagai struktur URL. Mode nilai formulir memakai aturan pengodean formulir untuk satu nilai dan tidak mengembalikan nama parameter. Mode URL lengkap mempertahankan pemisah seperti titik dua, garis miring, tanda tanya, ampersand, tanda sama dengan, dan penanda fragmen dalam teks.
Pilih gaya sesuai aplikasi penerima, bukan berdasarkan output yang terlihat paling pendek. Mengenkode seluruh kueri sebagai satu nilai atau membiarkan pemisah terbuka di dalam nilai dapat mengubah makna. Alat ini tidak memisahkan kueri yang ditempel menjadi pasangan nama/nilai dan tidak menentukan bagian yang merupakan host, jalur, kueri, atau fragmen.
| Gaya | Input yang berguna | Batas implementasi |
|---|---|---|
| Komponen URL | Satu nilai kueri atau segmen jalur | Memberi escape pada tanda baca dicadangkan; menambahkan escape ketat untuk lima tanda |
| Nilai formulir | Satu nilai terenkode untuk formulir | Enkode URLSearchParams; dekode mengganti + literal sebelum dekode persen yang ketat |
| URL lengkap | Alamat yang sudah dirangkai | encodeURI/decodeURI; himpunan dicadangkannya sendiri, bukan validasi URL lengkap |
RFC 3986: sintaks URI, karakter tidak dicadangkan, dan pengodean persenWHATWG URL: penguraian dan serialisasi formulir berpengodean URLECMAScript: encodeURI dan decodeURI
Apa yang dilakukan pengodean persen terhadap byte
Escape persen adalah tanda persen yang diikuti dua digit heksadesimal untuk merepresentasikan satu byte. Karakter Unicode dapat memerlukan beberapa byte UTF-8, sehingga satu karakter yang terlihat mungkin membutuhkan beberapa escape. Spasi ASCII adalah 20 dalam heksadesimal dan menjadi %20 pada enkode komponen serta URL lengkap; pengodean formulir merepresentasikan spasi itu sebagai +.
Contoh tetap ini menunjukkan pentingnya memilih gaya. Plus literal dan spasi yang dienkode merupakan nilai berbeda. Garis miring dan tanda baca kueri di baris ketiga merupakan data komponen dalam satu kasus dan tetap menjadi karakter struktural pada mode URL lengkap. Kedua tindakan tidak mengirim permintaan ke alamat.
| Teks input | Output komponen | Output nilai formulir | Output URL lengkap |
|---|---|---|---|
a b+c | a%20b%2Bc | a+b%2Bc | a%20b+c |
café | caf%C3%A9 | caf%C3%A9 | caf%C3%A9 |
a/b?x=1#part | a%2Fb%3Fx%3D1%23part | a%2Fb%3Fx%3D1%23part | a/b?x=1#part |
~* | ~%2A | %7E* | ~* |
😀 | %F0%9F%98%80 | %F0%9F%98%80 | %F0%9F%98%80 |
RFC 3986: sintaks URI, karakter tidak dicadangkan, dan pengodean persenWHATWG Encoding: UTF-8 dan dekode teksWHATWG URL: penguraian dan serialisasi formulir berpengodean URLECMAScript: encodeURI dan decodeURI
Mode komponen dan escape yang ketat
Enkode komponen ToolMellow menggunakan encodeURIComponent serta menambahkan escape untuk !, apostrof, (, ), dan *. Karakter ASCII yang tetap literal adalah huruf, digit, dan -._~. Ini lebih mendekati himpunan karakter tidak dicadangkan dalam RFC 3986 dibanding encodeURIComponent tanpa perubahan, yang mempertahankan lima tanda tambahan tersebut.
Misalnya, nilai red&blue=1 menjadi red%26blue%3D1. Nilai itu dapat dipakai sebagai nilai parameter tanpa ampersand-nya menjadi pemisah kueri lain. Dekode komponen menggunakan decodeURIComponent: karakter dicadangkan yang diberi escape persen didekode, sedangkan + literal tetap plus. Mode ini tidak mengurai pasangan kueri dan tidak menormalisasi URL lengkap.
RFC 3986: sintaks URI, karakter tidak dicadangkan, dan pengodean persenECMAScript: encodeURIComponent dan decodeURIComponent
Nilai formulir: plus, spasi, tilde, dan asterisk
Enkode nilai formulir mengikuti serialisasi URLSearchParams untuk satu nilai. Spasi menjadi +, plus literal menjadi %2B, dan asterisk literal dipertahankan. Tilde menjadi %7E. Perbedaan ini memang sesuai aturan: pengodean formulir memiliki himpunan yang diizinkan sendiri, berbeda dari mode komponen.
Dekode terlebih dahulu mengganti tanda plus literal dengan spasi, kemudian memanggil decodeURIComponent yang ketat. Jadi, a+b%2Bc menjadi a b+c: %2B menjadi plus setelah penggantian awal dan tidak diubah menjadi spasi kedua. Ini adalah dekoder nilai, bukan pengurai kueri URLSearchParams yang toleran. Escape rusak dan UTF-8 tidak valid yang dienkode dengan persen menyebabkan kesalahan, bukan diperbaiki.
WHATWG URL: penguraian dan serialisasi formulir berpengodean URLECMAScript: encodeURIComponent dan decodeURIComponent
Mode URL lengkap mempertahankan himpunan pemisahnya sendiri
Enkode URL lengkap menggunakan encodeURI. Pemisah alamat yang sudah dirangkai dipertahankan, sementara spasi dan teks lain yang sesuai diberi escape. Misalnya, https://example.com/a b?q=a+b#part menjadi https://example.com/a%20b?q=a+b#part. Plus tetap plus pada tahap ini; cara aplikasi mengurai kueri setelahnya merupakan tahap terpisah.
Dekode URL lengkap menggunakan decodeURI, yang mempertahankan escape untuk himpunan dicadangkannya sendiri ;/?:@&=+$,#. Misalnya, %2F, %26, dan %23 tetap dalam bentuk escape, sedangkan %20 menjadi spasi. Himpunan lama ini tidak mencakup semua karakter dicadangkan RFC 3986: %5B dan %5D didekode menjadi kurung siku, dan enkode URL lengkap memberi escape persen pada kurung siku literal. Mode ini tidak mengurai URL, tidak memvalidasi host atau skema, tidak menormalisasi host IPv6, tidak mengonversi domain melalui IDNA, dan tidak mengambil alamat.
ECMAScript: encodeURI dan decodeURIWHATWG URL: penguraian URL, host, dan URLSearchParamsRFC 3986: sintaks URI, karakter tidak dicadangkan, dan pengodean persen
UTF-8, Unicode, dan perbedaan input mentah
Enkode memberi escape persen pada byte UTF-8 dari karakter yang memerlukan escape. Pada café, huruf terakhir memerlukan dua byte UTF-8 yang direpresentasikan dengan %C3%A9; emoji 😀 memakai empat byte. Batas editor menghitung unit kode UTF-16 JavaScript, sehingga panjang byte, panjang unit kode, dan jumlah karakter terlihat dapat berbeda. Konversi ini tidak menormalisasi teks Unicode.
Setiap gaya enkode menolak surrogate Unicode yang tidak berpasangan. Dekode URL lengkap juga terlebih dahulu memeriksa apakah input mentah adalah Unicode dengan struktur valid. Dekode komponen dan formulir tidak melakukan pemeriksaan string mentah yang terpisah itu: unit kode literal tanpa escape dapat diteruskan, sedangkan urutan byte dengan escape persen harus menjadi UTF-8 valid. Jangan menganggap dekode yang berhasil sebagai validasi umum setiap karakter literal atau sebagai jaminan URL aman.
ECMAScript: encodeURIComponent dan decodeURIComponentECMAScript: encodeURI dan decodeURIECMAScript: isWellFormed pada StringWHATWG Encoding: UTF-8 dan dekode teks
Escape rusak, UTF-8 tidak valid, dan output tak terduga
Escape memerlukan tepat dua digit heksadesimal setelah setiap tanda persen, dan urutan byte yang diberi escape harus memenuhi aturan UTF-8 dekoder. Tanda persen literal yang ingin dienkode menjadi %25; tanda persen tunggal dalam input dekode adalah kesalahan. Alat tidak memangkas spasi secara diam-diam dan tidak mendekode berulang kali sampai teks terlihat terbaca.
Periksa gaya dan seluruh nilai asli sebelum mengubah karakter. Spasi atau akhir baris mentah tetap merupakan data input, sehingga dapat mengubah enkode. Jika Anda menyalin atribut HTML, string JSON dalam tanda kutip, atau seluruh badan permintaan, uraikan format luar tersebut secara terpisah. Pemisah dan aturan escape-nya tidak otomatis menjadi aturan pengodean persen.
| Input atau gejala | Penyebab | Langkah berikutnya |
|---|---|---|
% atau %2 | Escape persen tidak lengkap | Periksa seluruh nilai yang disalin |
%GG | Digit escape bukan heksadesimal | Periksa sumber pembuatnya |
%FF | Byte ber-escape bukan UTF-8 valid | Tentukan pengodean karakter yang diharapkan atau cakupan binernya |
a+b tetap plus dalam mode komponen | Plus literal bukan spasi dalam mode itu | Gunakan mode formulir hanya jika penerima mengharapkannya |
Dekode URL lengkap mempertahankan %2F | decodeURI mempertahankan pemisah dicadangkan itu | Gunakan dekode komponen untuk nilai individual yang sesuai |
ECMAScript: encodeURIComponent dan decodeURIComponentECMAScript: encodeURI dan decodeURIRFC 3986: sintaks URI, karakter tidak dicadangkan, dan pengodean persen
Mengapa %25 muncul dan kapan dekode kedua keliru
Mengenkode tanda persen yang sudah dienkode menghasilkan lapisan lain: enkode komponen %2F menghasilkan %252F. Satu dekode komponen %252F mengembalikan %2F; dekode kedua menghasilkan /. Setiap langkah mengubah satu lapisan pengodean. %25 saja tidak membuktikan kesalahan, karena aplikasi mungkin sengaja membawa teks terenkode di dalam nilai lain.
Tentukan lapisan yang diharapkan aplikasi, jangan mendekode berulang sampai tanda baca muncul. Dekode komponen kedua dapat mengubah data menjadi garis miring atau pemisah struktural. Dekode URL lengkap dapat sengaja mempertahankan pemisah ber-escape itu, sehingga contoh komponen tidak berarti setiap mode menghapus semua escape secara berulang. Alat tidak mengetahui aturan perutean atau otorisasi aplikasi.
RFC 3986: sintaks URI, karakter tidak dicadangkan, dan pengodean persenECMAScript: encodeURIComponent dan decodeURIComponentECMAScript: encodeURI dan decodeURI
String kueri, segmen jalur, dan penggunaan aman dalam aplikasi
Untuk parameter kueri, pisahkan nama parameter dan struktur kueri dari nilainya. API pembangun URL seperti URL dan URLSearchParams dapat membantu merangkai serta menserialisasi alamat nyata. Alat ini hanya mengubah teks yang diberikan; tidak memvalidasi hostname, tidak memperpendek tautan, tidak mengikuti pengalihan, dan tidak menentukan skema yang boleh digunakan aplikasi.
Pengodean persen adalah representasi yang dapat dibalik, bukan enkripsi, hashing, escape HTML, atau otorisasi. Mengenkode skema berbahaya tidak membuat tautan dapat dipercaya, dan mendekode nilai tidak membuatnya aman untuk dimasukkan sebagai HTML atau kode yang dapat dieksekusi. Terapkan aturan validasi dan escape konteks tujuan serta jangan masukkan rahasia nyata dalam URL contoh yang dibagikan.
WHATWG URL: penguraian URL, host, dan URLSearchParamsWHATWG URL: penguraian dan serialisasi formulir berpengodean URLRFC 3986: sintaks URI, karakter tidak dicadangkan, dan pengodean persen
Batas input, pertumbuhan output, dan file teks lokal
Batas input adalah 1,000,000 unit kode UTF-16, bukan satu juta byte UTF-8 atau grafem yang ditampilkan. Escape dapat memperpanjang output: satu juta spasi ASCII menghasilkan tiga juta karakter dalam mode komponen. Salin dan Unduh tetap tersedia untuk output di atas batas input, tetapi Gunakan hasil sebagai input tidak dapat memuat hasil yang terlalu besar. Memori browser yang tersedia tetap menjadi batas praktis.
Membuka file lokal menggunakan File.text() untuk membaca teks UTF-8. File berukuran 4,000,000 byte atau lebih ditolak; teks terbaca yang melebihi 1,000,000 unit UTF-16 juga ditolak. Pembacaan biasa menghapus BOM UTF-8 di awal dan mengganti urutan UTF-8 yang rusak, sehingga bukan enkode biner yang persis per byte atau dekode dalam sembarang himpunan karakter. Ekstensi file tidak membuktikan pengodeannya.
W3C File API: pembacaan Blob sebagai teksWHATWG Encoding: UTF-8 dan dekode teksECMAScript: isWellFormed pada String
Salin, unduh teks, hapus, dan privasi
Unduh menyimpan hasil sebagai teks UTF-8 dalam toolmellow-result.txt, bukan permintaan, laporan, atau halaman web yang dibuka. Konversi kosong yang berhasil juga mengaktifkan Salin hasil dan Unduh. Jika akses papan klip tidak tersedia, pilih output dan salin secara manual. Untuk pemeriksaan sederhana, enkode teks yang diketahui, gunakan kembali hasil jika memenuhi batas, kemudian dekode dengan gaya yang sama.
Hapus mereset input, hasil, kesalahan, isi pencarian/penggantian, dan riwayat editor, sambil mempertahankan Gaya pengodean dan Bungkus baris. Isi kerja tetap di memori halaman, bukan riwayat akun. Menyegarkan atau menutup ruang kerja membuang keadaan kerja itu; file unduhan tetap berada di perangkat. Hapus tidak menjamin penghapusan jejak yang dapat dipulihkan dari memori browser atau sistem operasi.
Konversi berjalan dalam worker browser lokal dan tidak mengirim teks URL yang dimasukkan, isi file yang dipilih, atau hasil ke server konversi. Memuat situs tetap mengirim metadata permintaan biasa ke hosting dan memakai Google Analytics untuk kunjungan halaman, termasuk cookie serta informasi browser/perangkat. Konversi lokal tidak berarti anonimitas, tidak menjanjikan lalu lintas nol, dan tidak menjanjikan ketiadaan pencatatan infrastruktur; baca halaman privasi situs.
Sematkan enkoder dan dekoder URL beserta backlink
Pilih bahasa halaman dan buka bagian integrasi di bawah ruang kerja. Salin atau unduh cuplikan HTML yang disediakan ke area situs yang mengizinkan iframe dan skrip eksternal. Cuplikan berisi iframe ToolMellow, skrip pengatur ukuran, dan backlink terlihat ke halaman alat ToolMellow dalam bahasa yang sesuai. Pertahankan tautan kredit tersebut.
Pratinjau sematan di layar sempit dan pastikan izin papan klip serta dukungan sumber daya eksternal pada platform Anda. Sematan memakai tiga gaya, cakupan teks, dan batas yang sama; bukan API konversi server dan bukan layanan pengambil URL. Tautan yang disediakan memakai nofollow dan noopener, sehingga keberadaannya tidak menjamin peringkat pencarian yang lebih tinggi.
Pertanyaan umum
Bagaimana cara mengenkode teks untuk URL?
Pilih gaya untuk tujuan: Komponen URL untuk nilai individual atau segmen jalur, Nilai formulir untuk serialisasi formulir, atau URL lengkap untuk alamat yang sudah dirangkai dan pemisahnya harus tetap ada. Tempel teks lalu tekan Enkode. Alat tidak membuka alamat.
Bagaimana cara mendekode nilai yang dienkode untuk URL?
Pilih gaya yang sesuai lalu tekan Dekode. Mode komponen dan formulir mendekode UTF-8 ber-escape persen secara ketat; formulir juga mengubah plus literal menjadi spasi terlebih dahulu. Mode URL lengkap mempertahankan escape untuk himpunan dicadangkannya sendiri. Alat tidak mengurai kueri menjadi pasangan.
Kapan tanda plus berarti spasi dalam URL?
Dalam alat ini, hanya dekode Nilai formulir yang mengganti plus literal dengan spasi. Komponen URL dan URL lengkap mempertahankan plus literal saat mendekode. Penguraian application/x-www-form-urlencoded memiliki aturan plus sendiri; aturan itu tidak berlaku universal untuk setiap komponen URL.
Apa perbedaan %20 dan +?
%20 adalah escape persen untuk byte spasi ASCII. Serialisasi formulir memakai plus untuk spasi dan %2B untuk plus literal. Format penerima menentukan apakah plus harus ditafsirkan sebagai spasi.
Mengapa dekode URL lengkap mempertahankan %2F?
Mode ini menggunakan decodeURI dan mempertahankan escape untuk himpunannya ;/?:@&=+$,#, termasuk garis miring, ampersand, dan penanda fragmen. Ini bukan semua karakter dicadangkan RFC 3986: escape kurung siku menjadi kurung siku. Mode komponen juga mendekode escape pemisah tersebut. Pilih sesuai bagian alamat yang dituju dan jangan gunakan mode lengkap untuk menormalisasi host IPv6.
Apa perbedaannya dengan encodeURIComponent?
Mode komponen ToolMellow juga memberi escape pada tanda seru, apostrof, kurung, dan asterisk. Hanya huruf, digit, dan -._~ yang tetap literal. Mode formulir dan lengkap memakai aturan serialisasi lain; keduanya bukan alias yang dapat saling menggantikan.
Mengapa dekode URL gagal?
Escape tidak lengkap atau bukan heksadesimal serta UTF-8 tidak valid yang dienkode dengan persen menyebabkan kesalahan. Periksa nilai asli, gaya yang diharapkan, dan format luarnya. Alat tidak memperbaiki escape rusak dan tidak diam-diam memilih pengodean karakter lain.
Apakah alat selalu memvalidasi Unicode saat mendekode?
Tidak. Dekode URL lengkap memeriksa apakah input mentah adalah Unicode dengan struktur valid; dekode komponen/formulir tidak memeriksa terpisah unit kode literal tanpa escape. Urutan byte ber-escape persen didekode ketat sebagai UTF-8. Dekode yang berhasil bukan validasi URL lengkap.
Mengapa URL saya berisi %25?
%25 merepresentasikan tanda persen. Tanda ini dapat muncul ketika teks terenkode dienkode lagi, seperti %2F menjadi %252F dalam mode komponen. Tentukan lapisan yang diharapkan; dekode berulang dapat mengubah data menjadi tanda baca struktural.
Bisakah saya menempelkan kueri lengkap ke Nilai formulir?
Alat memperlakukannya sebagai satu nilai, bukan rangkaian pasangan parameter. Enkode memberi escape pada pemisah di dalam nilai; dekode tidak mengambil nama dan nilai. Gunakan pengurai URL/kueri yang sesuai untuk menangani struktur kueri lengkap.
Bisakah saya mengenkode file lokal atau menggunakan kembali output besar?
Kontrol file membaca teks UTF-8 dari file yang lebih kecil dari 4,000,000 byte dan mengizinkan hingga 1,000,000 unit UTF-16 input. Ini bukan enkode file biner mentah. Output dapat lebih besar dan masih disalin/diunduh, tetapi output di atas batas tidak dapat digunakan kembali sebagai input.
Apakah pengodean URL merupakan enkripsi?
Tidak. Pengodean persen adalah representasi yang dapat dibalik dan tidak menambahkan kerahasiaan atau otorisasi. Ini juga bukan hashing, escape HTML, atau jaminan URL aman. Terapkan aturan validasi dan escape konteks tujuan.
Bisakah saya menyematkan enkoder dan dekoder URL di situs web saya?
Gunakan cuplikan HTML dalam bahasa yang sesuai di bawah ruang kerja, pertahankan backlink ToolMellow yang terlihat, dan pastikan dukungan iframe/skrip. Sematan memakai tiga gaya dan batas teks lokal yang sama; bukan API konversi server dan bukan layanan pengambil URL.
Sumber dan bacaan lanjutan
- RFC 3986: sintaks URI, karakter tidak dicadangkan, dan pengodean persen
- ECMAScript: encodeURIComponent dan decodeURIComponent
- ECMAScript: encodeURI dan decodeURI
- ECMAScript: isWellFormed pada String
- WHATWG URL: penguraian dan serialisasi formulir berpengodean URL
- WHATWG URL: penguraian URL, host, dan URLSearchParams
- WHATWG Encoding: UTF-8 dan dekode teks
- W3C File API: pembacaan Blob sebagai teks