2010-03-03 4 views
138

Ich versuche, mehrere Leerzeichen durch ein einzelnes Leerzeichen zu ersetzen. Wenn ich ereg_replace verwende, erhalte ich einen Fehler darüber, dass es veraltet ist.php Ersetzen mehrerer Leerzeichen mit einem einzelnen Leerzeichen

ereg_replace("[ \t\n\r]+", " ", $string); 

Gibt es einen identischen Ersatz dafür? Ich muss mehrere " " weiße Räume und mehrere nbsp weiße Räume mit einem einzelnen Leerraum ersetzen.

Antwort

297

Verwenden preg_replace() und statt [ \t\n\r] Verwendung \s:

$output = preg_replace('!\s+!', ' ', $input); 

Von Regular Expression Basic Syntax Reference:

\ d, \ w und \ s

Stenografie Charakterklassen passende Ziffern, Wortzeichen (Buchstaben, Ziffern und Unterstriche), und weiß Leerzeichen (Leerzeichen, Tabulatoren und Zeile Brüche). Kann innerhalb und außerhalb der Zeichenklassen verwendet werden.

+0

@Cletus: Dieser würde ein einzelnes Leerzeichen durch Leerzeichen ersetzen. Denkst du nicht etwa wie: preg_replace ('/ (?: \ S \ s + | \ n | \ t) /', '', $ x) * wird * besonders bei Text mit mehreren einzelnen Leerzeichen * effizienter? – codaddict

+21

@codaddict: zufällig, vor einem Moment habe ich Benchmarks auf realen Daten, Ergebnis (für Anrufe auf ~ 8300 verschiedene Textartikel): '/ (?: \ S \ s + | \ n | \ t) /' = > 1410 (langsamster), '/ \ s + /' => 611 (ok'ish), '/ \ s \ s + /' => 496 (am schnellsten). Der letzte ersetzt nicht das einzelne '\ n' oder' \ t', aber das ist ok für meinen Fall. – Frunsi

+13

/\ s {2,}/u '- Wenn Sie ein UTF-8-Problem haben, fügen Sie – user956584

33
preg_replace("/[[:blank:]]+/"," ",$input) 
+3

Ersetzt nicht "\ n" (PHP 5.3), "/ \ s + /" Mach's erledigt. ;) – Marek

+1

Das hat mir geholfen, mein Multibyte-Wort zu vermasseln und Š durch eine Art Quadrat zu ersetzen. –

+0

@ MārtiņšBriedis Es gibt eine separate Multibyte-Funktion: http://php.net/manual/en/function.mb-ereg-replace.php –

29
$output = preg_replace('/\s+/', ' ',$input); 

\ s ist eine Abkürzung für [ \t\n\r]. Mehrere Leerzeichen werden durch ein einzelnes Leerzeichen ersetzt.