Hapus spasi kosong dari dalam string


132

Saya menerima string dari kueri basis data, lalu saya menghapus semua tag HTML, carriage return, dan baris baru sebelum saya memasukkannya ke file CSV. Satu-satunya hal adalah, saya tidak dapat menemukan cara untuk menghilangkan kelebihan ruang putih dari antara string.

Apa yang akan menjadi cara terbaik untuk menghapus karakter spasi putih?


6
Tolong, kirim sampel string asli dan string yang diinginkan.
Zote

Bisakah Anda juga menjelaskan bagaimana hasil akhir perlu? Apakah Anda memasukkan koma ke dalam data untuk CSV, mendapatkannya dari database dengan koma yang sudah ada di dalamnya, memasukkan string ke fungsi yang menangani penyisipan CSV, dll?
Frank DeRosa

ok put out terakhir harus berupa string dengan setiap kata dipisahkan oleh spasi tunggal, pada saat itu adalah beberapa spasi putih.
joepour

1
@ Jo, saya tidak akan membuang waktu dan akan mulai memberikan penghargaan kepada semua orang yang telah membantu Anda sebelumnya! :)
Frankie

Jawaban:


286

Tidak yakin persis apa yang Anda inginkan tetapi di sini ada dua situasi:

  1. Jika Anda hanya berurusan dengan kelebihan whitespacepada awal atau akhir string yang dapat Anda gunakan trim(), ltrim()atau rtrim()untuk menghapusnya.

  2. Jika Anda berhadapan dengan ruang ekstra dalam sebuah string, pertimbangkan a preg_replacedari banyak whitespaces " "*dengan satu whitespace " ".

Contoh:

$foo = preg_replace('/\s+/', ' ', $foo);

62
$ foo = preg_replace ('/ \ s + /', '', $ foo);
genio

menggunakan $foo = preg_replace( '/\s+/', ' ', $foo );akan membunuh efeknl2br()
Waiyl Karim

1
cukup gunakan nl2br sebelum menggunakan preg_replace dan Anda harus baik-baik saja.
Lukas Liesis

Catatan Typo / Escaper - jika kode tidak menghapus spasi tambahan untuk Anda - pastikan Anda memiliki "\" sebelum "s" :) beberapa halaman pengujian php online menghapusnya :)
jave.web

Ini harus CSS yang aman, bukan? Seperti pada, ini akan dengan aman memampatkan variabel yang memegang string CSS multi-line yang panjang?
David

50
$str = str_replace(' ','',$str);

Atau, ganti dengan garis bawah, & nbsp; dll.


7
Ini menghapus semua spasi putih. Dia hanya ingin menormalkan string.
Svend

12
Apa yang saya cari (walaupun itu bukan pertanyaannya)
Sevenearths

@Gigala "Apa cara terbaik untuk menghapus karakter spasi putih?" adalah pertanyaannya. Jawaban ini memuaskan itu dengan sempurna.
Cory Dee

1
@CoryDee Itu benar, untuk satu kalimat terakhir. Tapi dalam pendahuluan, pertanyaannya adalah diungkapkan sebagai " kelebihan spasi", dengan penekanan pada kelebihannya. Anda akhirnya memuaskan masalah OPUAL ACTUAL, jadi itu tidak masalah, tapi selama kita mendapatkan teknis tentang hal itu ...
Spencer Ruskin

Ini tidak bekerja jika jumlah dari ruang adalah jumlah yang lebih , mari katakanlah: Hi Earthdengan 4 spasi di antara akan menjadi: HiEarth. Ini tidak menyelesaikan masalah saya dengan pertanyaan yang relevan.
JJ Labajo

26

$str = trim(preg_replace('/\s+/',' ', $str));

Baris kode di atas akan menghapus spasi tambahan , serta spasi awal dan akhir.


25

tidak ada contoh lain yang berfungsi untuk saya, jadi saya telah menggunakan yang ini:

trim(preg_replace('/[\t\n\r\s]+/', ' ', $text_to_clean_up))

ini menggantikan semua tab, baris baru, spasi ganda dll menjadi 1 ruang sederhana.


Terima kasih, @ wp78de tetapi untuk alasan apa pun, saya punya masalah dengan adil \s+. Meskipun sudah kembali pada tahun 2014 jadi mungkin itu diubah, belum menyentuh PHP selama 3 tahun terakhir, tidak dapat berkomentar tetapi akan meninggalkan jawaban saat ini sementara itu adalah solusi dan mungkin masih dalam beberapa kasus.
Lukas Liesis

9

Jika Anda ingin mengganti hanya beberapa spasi dalam string, misalnya: "this string have lots of space . " Dan Anda mengharapkan jawabannya "this string have lots of space", Anda dapat menggunakan solusi berikut:

$strng = "this string                        have lots of                        space  .   ";

$strng = trim(preg_replace('/\s+/',' ', $strng));

echo $strng;

5

Ada kelemahan keamanan untuk menggunakan preg_replace (), jika Anda mendapatkan payload dari input pengguna [atau sumber tidak tepercaya lainnya]. PHP mengeksekusi ekspresi reguler dengan eval (). Jika string yang masuk tidak dibersihkan dengan benar, aplikasi Anda berisiko terkena injeksi kode .

Dalam aplikasi saya sendiri, daripada repot-repot membersihkan input (dan karena saya hanya berurusan dengan string pendek), saya malah membuat fungsi prosesor yang sedikit lebih intensif, meskipun yang aman, karena tidak eval () apa pun.

function secureRip(string $str): string { /* Rips all whitespace securely. */
  $arr = str_split($str, 1);
  $retStr = '';
  foreach ($arr as $char) {
    $retStr .= trim($char);
  }
  return $retStr;
}

Ini hanya mengeksekusi menggunakan eval jika Anda menentukan 'e' modifierser: php.net/manual/en/… itu juga mengatakan bahwa "Fitur ini DIPERKIRAKAN dalam PHP 5.5.0, dan DIHAPUS pada PHP 7.0.0. " Jadi, Anda tidak dapat mengevaluasi hal-hal di preg_replace lagi.
ADJenks


2

Kamu bisa memakai:

$str = trim(str_replace("  ", " ", $str));

Ini menghilangkan spasi putih tambahan dari kedua sisi string dan mengubah dua spasi menjadi satu di dalam string. Perhatikan bahwa ini tidak akan mengubah tiga ruang atau lebih berturut-turut menjadi satu! Cara lain yang bisa saya sarankan adalah menggunakan implode dan meledak yang lebih aman tetapi sama sekali tidak optimal!

$str = implode(" ", array_filter(explode(" ", $str)));

Saran saya adalah menggunakan asli untuk loop atau menggunakan regex untuk melakukan pekerjaan semacam ini.


Ini tidak mengkonversi beberapa ruang dengan benar di mana ruang lebih panjang dari dua ruang.
mikeybeck

1

Untuk memperluas jawaban Sandip, saya memiliki banyak string muncul di log yang salah kode dalam bit.ly. Mereka bermaksud hanya kode URL tetapi menempatkan pegangan twitter dan beberapa hal lainnya setelah spasi. Terlihat seperti ini

? productID =26%20via%20@LFS

Biasanya, itu tidak akan menjadi masalah, tapi saya mendapatkan banyak upaya injeksi SQL, jadi saya mengarahkan ulang apa pun yang bukan ID yang valid ke 404. Saya menggunakan metode preg_replace untuk membuat string productID yang tidak valid menjadi sebuah ID produk yang valid.

$productID=preg_replace('/[\s]+.*/','',$productID);

Saya mencari spasi di URL dan kemudian menghapus semuanya setelahnya.


0

Baru-baru ini saya menulis fungsi sederhana yang menghilangkan ruang putih berlebih dari string tanpa ekspresi reguler implode(' ', array_filter(explode(' ', $str))).


-1
$str = "I      am a PHP   Developer";
$str_length = strlen($str);
$str_arr = str_split($str);
for ($i = 0; $i < $str_length; $i++) {
   if (isset($str_arr[$i + 1])  && $str_arr[$i] == ' ' && $str_arr[$i] == $str_arr[$i + 1]) {
       unset($str_arr[$i]);
   } 
   else {
     continue;
   }
}
echo implode("", $str_arr);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.