Tanda tambah tidak selalu berarti spasi

Alat URL Moyoutil mengonversi komponen URI. Dekode memakai decodeURIComponent, sehingga + tetap utuh. URLSearchParams memakai aturan application/x-www-form-urlencoded: + dalam string asli diganti spasi sebelum dekode persen. Karena urutan ini, tanda tambah yang dikodekan sebagai %2B tetap menjadi +.

URL WHATWG: Penguraian gaya formulir

ECMAScript: decodeURIComponent

Hasil mengeksekusi input yang sama di dua jalur

Ini adalah hasil menjalankan fungsi urlComponent proyek dan JavaScript URLSearchParams pada tanggal 5 Oktober 2026. Tanda kutip dalam tabel adalah tanda JSON yang membuat spasi terlihat, bukan karakter yang disertakan dalam hasil. Dalam penguraian kueri, kami mengawali setiap input dengan q=.

Penguraian kode komponen dibandingkan dengan penguraian nilai kueri
InputDekode MoyoutilURLSearchParams
C++"C++""C "
C%2B%2B"C++""C++"
a+b"a+b""a b"
a%20b"a b""a b"
Dua jalur dekode untuk C++ dan C%2B%2B. Mengurai q=C++ sebagai kueri menghasilkan dua spasi setelah C.
Diagram buatan sendiri dari keluaran kode yang telah direproduksi. 0x20 adalah kode karakter spasi dan 0x2B kode tanda tambah. Ini bukan tangkapan layar.

Untuk mempertahankan istilah penelusuran, buat kueri dengan nilai asli

Contoh ini hanya membuat string dan tidak mengirim permintaan ke server. Jika nilai asli C++ guide diberikan ke URLSearchParams, tanda tambah diserialkan sebagai %2B dan spasi sebagai +. encodeURIComponent memakai %20 untuk spasi tersebut. Dalam contoh ini, kedua hasil mengembalikan nilai asli saat diurai sebagai kueri.

const original = "C++ guide";
const query = new URLSearchParams({ q: original }).toString();
// q=C%2B%2B+guide
const component = encodeURIComponent(original);
// C%2B%2B%20guide
new URLSearchParams(query).get("q");
// C++ guide

URL WHATWG: Buat serial URLSearchParams

Alat URL Moyoutil belum menyediakan kolom untuk menyusun nama dan nilai kueri atau mode dekode formulir. Untuk memeriksa satu nilai, kodekan C++ guide, dekode hasilnya, lalu bandingkan dengan teks asli. Jangan masukkan URL lengkap ke kolom konversi nilai. Periksa aturan pengodean API yang digunakan.

Jika Anda memasukkan nilai yang sudah dikodekan, tanda persen juga akan dikonversi.

Masukkan nilai asli yang belum dikodekan ke bentuk objek URLSearchParams. Jika nilai sudah dikodekan dengan encodeURIComponent, % akan dikodekan lagi menjadi %25. Mengurai kueri di bawah sekali menghasilkan C%2B%2B, bukan C++. Periksa tahap pengiriman dan penerimaan sebelum mencoba dekode berulang.

const encoded = encodeURIComponent("C++");
// C%2B%2B
const query = new URLSearchParams({ q: encoded }).toString();
// q=C%252B%252B
new URLSearchParams(query).get("q");
// C%2B%2B

Urutan pengecekan link yang bermasalah

  1. Menyatukan istilah penelusuran asli dan string kueri yang diteruskan. Bedakan antara C++ dan C%2B%2B.
  2. Periksa apakah kode penerima adalah decodeURIComponent atau parser kueri berbasis formulir. Hasil decoding Moyoutil saja tidak menentukan hasil server.
  3. Rekonstruksi kueri dengan nilai asli dan bandingkan dengan hasil penguraian. Bedakan antara kode contoh dan aturan API sebenarnya.

Notasi persen yang tidak lengkap, seperti % atau %2, merupakan kesalahan di Moyoutil. %FF juga error karena teks UTF-8 tidak valid. Pemeriksaan ini tidak berarti bahwa penanganan kesalahan parser lain sama, juga bukan fungsi untuk memulihkan teks asli secara otomatis.

Pertanyaan yang Sering Diajukan

Haruskah saya menggunakan %20 atau +?

Saat Moyoutil mengodekan satu nilai, spasi menjadi %20. Serialisasi URLSearchParams memakai +. Periksa aturan penerima dan pastikan konversi bolak-balik mengembalikan nilai asli.

Bisakah saya mengganti semua tanda tambah asli dengan spasi?

Tidak. Hal itu mengubah makna nilai seperti C++. Terapkan aturan penguraian formulir hanya pada string yang diterima dalam format tersebut; jangan mengubah teks asli yang belum dikodekan secara sembarangan.