Ich komme $row['message']
aus einer MySQL-Datenbank und muss alle Leerzeichen wie \n
\t
und so weiter entfernen .
$row['message'] = "This is a Text \n and so on \t Text text.";
sollte formatiert werden für:
$row['message'] = 'This is a Text and so on Text text.';
Ich habe es versucht:
$ro = preg_replace('/\s\s+/', ' ',$row['message']);
echo $ro;
aber es entfernt nicht \n
oder \t
nur einzelne Leerzeichen. Kann mir jemand sagen, wie das geht?
php
regex
string
preg-replace
whitespace
creativz
quelle
quelle
Antworten:
Du brauchst:
Sie verwenden ein
\s\s+
Leerzeichen (Leerzeichen, Tabulator oder Zeilenumbruch), gefolgt von einem oder mehreren Leerzeichen. Dies bedeutet effektiv, dass zwei oder mehr Leerzeichen durch ein einzelnes Leerzeichen ersetzt werden.Sie möchten ein oder mehrere Leerzeichen durch ein einzelnes Leerzeichen ersetzen, damit Sie das Muster
\s\s*
oder\s+
(empfohlen) verwenden können.quelle
\s
"vertikale Registerkarte" nicht enthaltenchr(11)
. Um es auch einzuschließen, müssen Siespace
die Zeichenklasse verwenden:[[:space:]]+
php.net/manual/en/regexp.reference.character-classes.phpDies gibt aus
quelle
\s
enthält bereits Tabulatoren und neue Zeilen, daher scheint dieser obige reguläre Ausdruck ausreichend zu sein.quelle
/m
haben keine Auswirkung, da es keine^
oder$
Anker gibt und die/u
keine Auswirkung haben, außer sie etwas zu verlangsamen und zu sterben, wenn die Eingabezeichenfolge nicht gültig ist UTF-8 (es hat keinen Einfluss darauf, welche\s
Übereinstimmungen, aber es würde Auswirkungen haben\pZ
).vereinfacht zu einer Funktion:
basierend auf der Antwort von Danuel O'Neal.
quelle
quelle
Ich kann das Problem hier nicht wiederholen:
Ich bin nicht sicher, ob es nur ein Transkriptionsfehler war oder nicht, aber in Ihrem Beispiel verwenden Sie eine Zeichenfolge in einfachen Anführungszeichen.
\n
und\t
werden nur dann als neue Zeile und Tabulator behandelt, wenn Sie eine Zeichenfolge in doppelten Anführungszeichen haben. Das ist:Bearbeiten : Wie Codaddict hervorhob,
\s\s+
wird kein einzelnes Tabulatorzeichen ersetzt. Ich denke immer noch nicht, dass die Verwendung\s+
eine effiziente Lösung ist. Wie wäre es stattdessen damit:quelle
Dies ersetzt alle Tabulatoren, alle Zeilenumbrüche und alle Kombinationen aus mehreren Leerzeichen, Registerkarten und Zeilenumbrüchen durch ein einziges Leerzeichen.
quelle
quelle
Ohne preg_replace ()
quelle
Ich benutze diesen Code und dieses Muster:
Sie können dies unter http://writecodeonline.com/php/ testen.
quelle
SELECT search_able, REGEXP_REPLACE (search_able,"\\s+",' ') FROM book where id =260
Also vielen DankAlles was Sie brauchen, ist es wie folgt auszuführen:
quelle
Dies ist, was ich verwenden würde:
ein. Stellen Sie sicher, dass Sie doppelte Anführungszeichen verwenden, zum Beispiel:
b. Verwenden Sie zum Entfernen zusätzlicher Leerzeichen:
Es ist vielleicht nicht die schnellste Lösung, aber ich denke, es wird den geringsten Code erfordern, und es sollte funktionieren. Ich habe jedoch noch nie MySQL verwendet, daher kann ich mich irren.
quelle
In Wahrheit, wenn Sie denken, dass Sie so etwas wollen:
quelle
Dadurch werden mehrere Registerkarten durch eine einzelne Registerkarte ersetzt
quelle
Ohne preg_replace mit Hilfe der Schleife.
quelle