Rimuovi più spazi bianchi


208

Ricevo $row['message']da un database MySQL e ho bisogno di rimuovere tutti gli spazi bianchi \n \te così via.

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

dovrebbe essere formattato per:

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

Provai:

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

ma non rimuove \no \t, solo singoli spazi. Qualcuno può dirmi come farlo?


1
I caratteri newline e tab sono tra virgolette singole, quindi li vuoi letterali?
Mark Lalor,

Ho corretto la citazione della setta di codice con \ n e \ t cambiandola tra virgolette.
Buttle Butkus,

Risposte:


394

Hai bisogno:

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

Stai usando il \s\s+che significa spazi bianchi (spazio, tabulazione o riga nuova) seguiti da uno o più spazi bianchi. Ciò significa effettivamente sostituire due o più spazi bianchi con un singolo spazio.

Quello che vuoi è sostituire uno o più spazi bianchi con uno spazio bianco singolo, in modo da poter usare il modello \s\s*o \s+(consigliato)


1
il suo metodo è migliore di questo: perché dovresti sostituire uno spazio con uno spazio?
nickf

16
Vuole anche che \ n e \ t vengano sostituiti con spazio. Ora il suo modello non corrisponde a questi, diciamo per $ x = "non funziona \ tquesto \ twork"; L'OP vuole che tutti gli spazi bianchi vengano sostituiti con un singolo spazio.
codaddict,

@codaddict, come possiamo mantenere \ n e rimuovere tutti gli altri spazi multipli e le schede dalla stringa? per favore aiutatemi
Mansoorkhan Cherupuzha,

Puoi essere più preciso perché si consiglia "\ s +"?
Isius,

6
Nota che in PHP \snon è inclusa la "scheda verticale" chr(11). Per includerlo anche tu devi usare la spaceclasse di caratteri: [[:space:]]+ php.net/manual/en/regexp.reference.character-classes.php
Yaroslav
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.