Ich erhalte eine Zeichenfolge aus einer Datenbankabfrage und entferne dann alle HTML-Tags, Zeilenumbrüche und Zeilenumbrüche, bevor ich sie in eine CSV-Datei einfüge. Das einzige ist, ich kann keinen Weg finden, den überschüssigen Leerraum zwischen den Saiten zu entfernen .
Was wäre der beste Weg, um die inneren Leerzeichen zu entfernen?
Antworten:
Sie wissen nicht genau, was Sie wollen, aber hier sind zwei Situationen:
Wenn Sie nur den Umgang mit Überschuss whitespacean den Anfang oder das Ende der Zeichenfolge , die Sie verwenden können
trim()
,ltrim()
oderrtrim()
es zu entfernen.Wenn Sie mit zusätzlichen Leerzeichen innerhalb einer Zeichenfolge arbeiten, ziehen Sie eine
preg_replace
von mehreren whitespaces" "*
mit einer einzelnen whitespace" "
.Beispiel:
quelle
$foo = preg_replace( '/\s+/', ' ', $foo );
Willen töten die Auswirkungen vonnl2br()
Oder ersetzen Sie durch Unterstrich, & nbsp; etc etc. etc.
quelle
Hi Earth
mit 4 Räumen dazwischen werden werden:HiEarth
. Dies löst mein Problem nicht mit der Frage relevant.$str = trim(preg_replace('/\s+/',' ', $str));
Die obige Codezeile entfernt zusätzliche Leerzeichen sowie führende und nachfolgende Leerzeichen.
quelle
Keines der anderen Beispiele hat für mich funktioniert, daher habe ich dieses verwendet:
Dies ersetzt alle Tabulatoren, neuen Zeilen, doppelten Leerzeichen usw. durch einfache 1 Leerzeichen.
quelle
\s+
. Obwohl es im Jahr 2014 war, ist es vielleicht geändert worden, hat PHP in den letzten 3 Jahren nicht berührt, kann keinen Kommentar abgeben, wird aber die aktuelle Antwort hinterlassen, während es eine Lösung war und in einigen Fällen immer noch sein kann.Wenn Sie beispielsweise nur mehrere Leerzeichen in einer Zeichenfolge ersetzen möchten:
"this string have lots of space . "
Und Sie erwarten, dass die Antwort lautet"this string have lots of space"
, können Sie die folgende Lösung verwenden:quelle
Die Verwendung von preg_replace () weist Sicherheitslücken auf, wenn Sie die Nutzdaten von Benutzereingaben [oder anderen nicht vertrauenswürdigen Quellen] erhalten. PHP führt den regulären Ausdruck mit eval () aus. Wenn die eingehende Zeichenfolge nicht ordnungsgemäß bereinigt wird, besteht die Gefahr, dass Ihre Anwendung einer Code-Injektion unterzogen wird .
In meiner eigenen Anwendung habe ich mich nicht um die Bereinigung der Eingabe gekümmert (und da ich mich nur mit kurzen Zeichenfolgen befasse), sondern um eine etwas prozessorintensivere Funktion, die jedoch sicher ist, da sie nichts auswertet ().
quelle
quelle
Sie können verwenden:
Dadurch werden zusätzliche Leerzeichen von beiden Seiten der Zeichenfolge entfernt und zwei Leerzeichen in eins innerhalb der Zeichenfolge konvertiert . Beachten Sie, dass dadurch nicht drei oder mehr Leerzeichen hintereinander in eins umgewandelt werden! Eine andere Möglichkeit, die ich vorschlagen kann, ist die Verwendung von Implodieren und Explodieren, die sicherer, aber nicht optimal ist!
Mein Vorschlag ist, eine native for-Schleife oder Regex zu verwenden, um diese Art von Arbeit zu erledigen.
quelle
Um Sandips Antwort zu erweitern, wurden in den Protokollen einige Zeichenfolgen angezeigt, die in bit.ly falsch codiert waren. Sie wollten nur die URL codieren, aber nach einem Leerzeichen ein Twitter-Handle und einige andere Dinge einfügen. Es sah so aus
Normalerweise wäre das kein Problem, aber ich bekomme viele SQL-Injection-Versuche, daher leite ich alles, was keine gültige ID ist, auf eine 404 um. Ich habe die Methode preg_replace verwendet, um die ungültige productID-Zeichenfolge in eine zu verwandeln gültige Produkt-ID.
Ich suche nach einem Leerzeichen in der URL und entferne dann alles danach.
quelle
Ich habe kürzlich eine einfache Funktion geschrieben, die überschüssigen Leerraum ohne regulären Ausdruck aus dem String entfernt
implode(' ', array_filter(explode(' ', $str)))
.quelle
quelle