Semua artikel

Spasi dan karakter tak terlihat: penyebab tersembunyi bug aneh

Menyalin judul atau kalimat pendek dari Microsoft Word lalu menempelkannya ke kolom formulir punya jebakan yang sering luput: Word kadang menyisipkan spasi non-breaking (U+00A0, karakter yang sama dengan entity HTML  ) alih-alih spasi biasa, tepatnya di titik-titik yang tidak boleh terpotong saat baris berganti.

Mengapa ini menyebabkan bug aneh

Gejala paling klasik adalah perbandingan string yang secara tak terduga mengembalikan "tidak sama", meskipun teks di layar terlihat identik. Penyebabnya sering kali satu string berisi spasi biasa dan yang lain berisi spasi non-breaking yang terbawa dari Word. Secara visual tidak ada perbedaan; bagi komputer, ada — dan inilah jenis bug yang lolos dari code review karena tidak terlihat di diff.

Trim

Trim menghapus karakter spasi dari awal dan akhir string, membiarkan konten di tengah tidak berubah. Ini adalah operasi standar pembersihan input pengguna — spasi ekstra yang tidak sengaja di awal kolom formulir seharusnya tidak memengaruhi perbandingan atau validasi sebuah nilai.

Menggabungkan spasi

Operasi umum lainnya adalah mengganti beberapa karakter spasi berturut-turut dengan satu. Ini berguna untuk teks yang disalin dari sumber yang diformat (seperti PDF atau tabel), di mana spasi ganda atau tab yang tidak sengaja bisa muncul menggantikan satu spasi.

Untuk apa ini dibutuhkan

  • Mendiagnosis mengapa perbandingan dua string yang tampak identik gagal.
  • Membersihkan teks yang disalin dari pengolah kata atau halaman web dari karakter berlebih dan tidak terlihat.
  • Menormalkan input pengguna sebelum menyimpannya ke basis data.

Karakter lebar nol

Selain karakter spasi yang terlihat, ada juga karakter lebar nol (zero-width space, zero-width joiner) — karakter ini sama sekali tidak memakan ruang di layar, tetapi tetap ada dalam teks sebagai karakter tersendiri. Karakter seperti ini terkadang masuk ke dalam teks saat disalin dari situs atau aplikasi pesan tertentu, dan bisa secara diam-diam merusak perbandingan string atau pencarian, sementara tetap sepenuhnya tidak terlihat bahkan di editor teks.

Coba alat