2009-11-09 26 views
99

Ich erhalte eine Zeichenfolge aus einer Datenbankabfrage, dann entferne ich alle HTML-Tags, Zeilenumbrüche und Zeilenumbrüche, bevor ich es in eine CSV-Datei einfügen. Einzige Sache ist, kann ich keinen Weg finden, um die überschüssige Leerraum von zwischen die Strings zu entfernen.Entfernen Sie überschüssige Leerzeichen aus einer Zeichenfolge

Was wäre der beste Weg, um die inneren Leerzeichen Zeichen zu entfernen?

+4

Bitte, schreiben eine Probe von ursprüngliche Zeichenfolge und gewünschte Zeichenfolge. – Zote

+0

Können Sie auch klären, wie die endgültige Ausgabe sein muss? Fügen Sie die Kommata in Daten für CSV ein, holen Sie sie aus einer Datenbank mit Kommas, geben Sie Strings in eine Funktion ein, die die CSV-Einfügung übernimmt, usw.? –

+0

ok Der letzte output muss eine Zeichenkette sein, wobei jedes Wort durch einen Whitespace getrennt ist, im Moment sind es mehrere Whitespaces. – joepour

Antwort

228

Nicht sicher genau das, was Sie wollen, aber hier sind zwei Situationen:

  1. Wenn Sie nur mit einem Überschuss Leerzeichen am Anfang oder Ende des Strings zu tun haben, können Sie trim(), ltrim() verwenden oder rtrim(), um es zu entfernen.

  2. Wenn Sie mit zusätzlichen Leerzeichen in einem String handelt betrachten ein preg_replace mehrerer Whitespaces" "* mit einem einzigen Leerzeichen" ".

Beispiel:

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

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

+6

Dieser Code wird auch alle neuen Zeilen entfernen –

+0

mit dem $ foo = preg_replace ('/ \ s + /', '', $ foo); 'wird die Auswirkungen von' nl2br() ' –

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

Oder ersetzen durch Unterstrich, & nbsp; etc etc.

+4

Dies entfernt alle Leerzeichen. Er möchte nur die Saite normalisieren. – Svend

+10

Was ich gesucht habe (obwohl es nicht die Frage war) – Sevenearths

+0

Ich suchte auch nach dieser besonderen Lösung :) – swl1020

3

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

+1

Sie haben sich auch nicht die Mühe gemacht, andere Antworten zu lesen, oder? – TechNyquist

17

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

Die obige Codezeile wird zusätzliche Räume sowie führende und nachfolgende Leerzeichen entfernen.

0

Um Sandips Antwort zu erweitern, hatte ich eine Reihe von Strings in den Protokollen, die in bit.ly falsch codiert waren. Sie wollten nur die URL codieren, aber nach einem Leerzeichen einen Twitter-Handle und ein paar andere Dinge einfügen. Es sah aus wie dieses

? productID =26%20via%[email protected] 

Normalerweise dass would't ein Problem sein, aber ich bin viel SQL-Injektion Versuche bekommen, so dass ich etwas umleiten, die keine gültige ID zu einem 404. I verwendet die preg_replace-Methode, um die ungültige productID-Zeichenfolge zu einer gültigen productID zu machen.

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

Ich suche nach einem Leerzeichen in der URL und dann entfernen Sie alles danach.

12

keine andere Beispiele für mich gearbeitet, so habe ich diese verwendet:

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

diese ersetzt alle Registerkarten, neue Linien, doppelte Leerzeichen usw. auf einfache 1 Raum.

6

Wenn Sie nur mehrere Leerzeichen in einem String, für Beispiel ersetzen: "this string have lots of space . " Und Sie erwarten, dass die Antwort "this string have lots of space" sein, können Sie die folgende Lösung verwenden:

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

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

echo $strng; 
Verwandte Themen