php birden whitespaces kaldırmak

10 Cevap php

Ben bir MySQL veritabanı $row['message'] alıyorum ve ben çok üzerinde \ n \ t ve benzeri tüm boşlukları kaldırmak gerekir.

$row['message'] = "This is   a Text \n and so on \t     Text text.";

biçimlendirilmiş olması gerektiğini:

$row['message'] = 'This is a Text and so on Text text.';

Denedim:

 $ro = preg_replace('/\s\s+/', ' ',$row['message']);
 echo $ro;

ama sadece tek alanlarda, \n veya \t kaldırmaz. Herkes bunu nasıl söyleyebilir?

10 Cevap

İhtiyacınız olanlar:

$ro = preg_replace('/\s+/', ' ',$row['message']);

Sen boşluk (boşluk, sekme veya satır) bir veya daha fazla boşluk tarafından takip gelir \s\s+ hangi kullanıyor. Hangi etkili bir şekilde tek bir alana sahip iki ya da daha fazla boşluk değiştirmek anlamına gelir.

Ne istediğiniz tek boşluk ile bir veya daha fazla boşluk yerine, yani desen \s\s* veya \s+ (önerilir) kullanabilirsiniz

<?php
$str = "This is  a string       with
spaces, tabs and newlines present";

$stripped = preg_replace(array('/\s{2,}/', '/[\t\n]/'), ' ', $str);

echo $str;
echo "\n---\n";
echo "$stripped";
?>

Bu çıkışlar

This is  a string   with
spaces, tabs and newlines present
---
This is a string with spaces, tabs and newlines present

Ben sorunu burada taklit edemez:

$x = "this    \n \t\t \n    works.";
var_dump(preg_replace('/\s\s+/', ' ', $x));
// string(11) "this works."

Ben sadece bir transkripsiyon hatası ya da değil emin değilim, ama örnekte, bir tek tırnaklı dize kullanarak ediyoruz. \n ve bir çift tırnaklı dize var ise \t, sadece yeni hat ve sekme olarak kabul edilir. Yani:

'\n\t' != "\n\t"

Edit: Codaddict belirttiği gibi, \s\s+, tek bir sekme karakteri değiştirmez. Hala \s+ olsa etkili bir çözümdür kullanarak sanmıyorum, bu yüzden nasıl yerine bu konuda:

preg_replace('/(?:\s\s+|\n|\t)/', ' ', $x);
preg_replace('/(\s\s+|\t|\n)/', ' ', $row['message']);

Bu tek bir alan tüm sekmeleri, tüm satırsonlarını ve birden çok boşluk, tab ve yeni satır tüm kombinasyonları değiştirir.

Bu benim kullanmak ne olduğunu:

a. Örneğin, çift tırnak kullandığınızdan emin olun:

$row['message'] = "This is   a Text \n and so on \t     Text text.";

b. Ekstra boşluk kaldırmak için kullanın:

$ro = preg_replace('/\s+/', ' ', $row['message']); 
echo $ro;

Bu hızlı çözüm olmayabilir, ama az kod gerektirir düşünüyorum, ve çalışması gerekir. Gerçi, mysql hiç kullanmadım, bu yüzden yanlış olabilir.

Ben bu kodu ve desen kullanmak:

preg_replace('/\\s+/', ' ',$data)

$data = 'This is   a Text 
   and so on         Text text on multiple lines and with        whitespaces';
$data= preg_replace('/\\s+/', ' ',$data);
echo $data;

Sen http://writecodeonline.com/php/ bu test edebilir

preg_replace ('/ [\ s] + / mu', '', $ var);

\ Zaten var sekmeleri ve yeni satırları içerir, bu nedenle bu yukarıdaki regex için yeterli görünmektedir.

Tüm ihtiyacınız aşağıdaki gibi çalıştırmak için:

echo preg_replace('/\s{2,}/', ' ', "This is   a Text \n and so on \t     Text text."); // This is a Text and so on Text text.

Gerçeği, eğer böyle bir şey istediğiniz düşünüyorum:

preg_replace('/\n+|\t+|\s+/',' ',$string);

Bu tek bir sekme birden fazla sekme yerini alacak

preg_replace("/\s{2,}/", "\t", $string);