Spasi di String Yang Aneh

Beberapa kasus, mungkin pernah temen-temen programmer manipulasi string di sisi server atau di client. Kasusnya banyak, bisa ganti besar kecil string, dipecah berdasarkan keyword tertentu dan banyak lagi. Belum lama saya ada sedikit problem di projek untuk handle spasi di string tertentu dimana saya ingin menghapus semua spasi yang nempel di string.

Contoh untuk perjelas kasus ini adalah saat tampil di browser, ada string “terus belajar”. Terlihat di browser, ada space antara “terus” dan “belajar”. Asumsi lain adalah, saya tidak tahu itu spasi atau tab atau white space lainnya.

Langkah awal yang saya lakukan itu handle di sisi server (PHP). Ada banyak fungsi dan trik yang tersedia oleh PHP untuk handle spasi di string. Namun anehnya tidak ada perubahan sedikitpun pada string tersebut. Penasaran, saya coba buat file php lain, dan coba jalankan fungsi-fungsi untuk handle space tersebut.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
  $string = "terus belajar";
  echo $string;
  echo "<br />"; 
 
  // dengan menggunakan explode
  $pecah_string1 = explode(" ",$string);
  echo "<pre>";
  echo "explode : ";
  print_r($pecah_string1);
  echo "</pre>";
 
  $pecah_string2 = preg_replace('/[\s]+/','', $string);
  echo "preg_replace(/\s+/) : " . $pecah_string2;
?>

Kalau dijalankan, si String “terus belajar” jadi berubah. Tapi kenapa yaa, problem di projek saya belum berubah.

Setelah cari sana sini, berharap ada yang sama juga problemnya di stactoverflow. Tetep gak ketemu..Akhirnya saya coba main handle di sisi client (javascript) dengan beberapa fungsi bawaan si JS dan regex di JS, tetep gak keubah juga…

Penasaran, saya coba log dengan console.log() di JS. Ternyata eh ternyata, di log ter-print “string&nbspstring” tanpa semicolon. Ada tag special html. Saya coba jalankan di file test saya.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
  $string = "terus&nbspbelajar";
  echo $string;
  echo "<br />"; 
 
  // dengan menggunakan explode
  $pecah_string1 = explode(" ",$string);
  echo "<pre>";
  echo "explode : ";
  print_r($pecah_string1);
  echo "</pre>";
 
  $pecah_string2 = preg_replace('/[\s]+/','', $string);
  echo "preg_replace(/\s+/) : " . $pecah_string2;
?>

Setelah dijalankan, gak jalan juga..string gak keubah dengan fungsi di atas, karna memang si PHP mungkin anggep itu bukan space tapi “&nbsp” itu sebuah string juga. Beda hal dengan browser, “&nbsp” itu dianggep sebuah html spesial yang harus di convert sesuai dengan standard.

Kenapa gak pake html_entity_decode, biar si PHP ngerti kalo itu sebuah html spesial ??

Tetep tidak bisa, karena “&nbsp” itu tanpa semicolon “;”. Kalau ditambahkan semicolon, bisa tuh. Anehnya standar browser itu nge-valid-in kalau tanpa atau dengan semicolon, html spesial akan selalu dijalankan walaupun di recommend mesti pake semicolon.

Alhasil, cara cepat, saya hardcode saja dengan str_replace(“&nbsp”,””,$string); 😀

Dalam beberapa kasus, kadang gak selalu coding itu sempurna, yang penting hasil keluaran sesuai dengan yang dipinta.

Moga catetan ini penting buat kedepan, baik yang nulis atau yang baca.

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: