Ich kenne diesen Kommentar PHP.net. Ich hätte gerne ein ähnliches Tool wie tr
für PHP, damit ich es einfach ausführen kann
tr -d " " ""
Ich führe die Funktion erfolglos php_strip_whitespace
durch
$tags_trimmed = php_strip_whitespace($tags);
Ich führe die Regex-Funktion auch erfolglos aus
$tags_trimmed = preg_replace(" ", "", $tags);
php
string
whitespace
Léo Léopold Hertz 준영
quelle
quelle
Antworten:
Ein regulärer Ausdruck berücksichtigt standardmäßig keine UTF-8-Zeichen. Das
\s
Metazeichen berücksichtigt nur den ursprünglichen lateinischen Satz. Daher entfernt der folgende Befehl nur Tabulatoren, Leerzeichen, Zeilenumbrüche und neue Zeilen// http://stackoverflow.com/a/1279798/54964 $str=preg_replace('/\s+/', '', $str);
Wenn UTF-8 zum Mainstream wird, wird dieser Ausdruck häufiger fehlschlagen / anhalten, wenn er die neuen utf-8-Zeichen erreicht, wobei Leerzeichen zurückbleiben, die
\s
nicht berücksichtigt werden können.Um mit den neuen Arten von Leerzeichen in Unicode / utf-8 fertig zu werden, ist eine umfangreichere Zeichenfolge erforderlich, um moderne Leerzeichen abzugleichen und zu entfernen.
Da reguläre Ausdrücke standardmäßig keine Mehrbytezeichen erkennen, können sie nur durch eine begrenzte Metazeichenfolge identifiziert werden, um zu verhindern, dass die Bytesegmente in anderen utf-8-Zeichen geändert werden (
\x80
im Quad-Satz könnten alle\x80
Subbytes ersetzt werden in intelligenten Anführungszeichen)$cleanedstr = preg_replace( "/(\t|\n|\v|\f|\r| |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf)+/", "_", $str );
Dies berücksichtigt und entfernt Tabulatoren, Zeilenumbrüche, vertikale Tabulatoren, Formularvorschübe, Wagenrückläufe, Leerzeichen und zusätzlich von hier :
Viele davon verursachen Chaos in XML-Dateien, wenn sie von automatisierten Tools oder Websites exportiert werden, die die Textsuche und -erkennung beeinträchtigen und unsichtbar in den PHP-Quellcode eingefügt werden können, wodurch der Parser zum nächsten Befehl (Absatz- und Zeilentrennzeichen) springt, der Zeilen verursacht Der zu überspringende Code führt zu zeitweiligen, ungeklärten Fehlern, die wir als "textuell übertragbare Krankheiten" bezeichnen.
[Es ist nicht mehr sicher, aus dem Web zu kopieren und einzufügen. Verwenden Sie einen Zeichenscanner, um Ihren Code zu schützen. lol]
quelle
trim()
sollte die richtige Antwort seinu
Flagge in der Regex geben?Abzustreifen alle Leerzeichen, können Sie einen regulären Ausdruck verwenden
$str=preg_replace('/\s+/', '', $str);
Siehe auch diese Antwort für etwas, das Leerzeichen in UTF-8-Zeichenfolgen verarbeiten kann.
quelle
+
nach dems
? Du brauchst es dafür nicht.Manchmal müssten Sie aufeinanderfolgende Leerzeichen löschen. Sie können es so machen:
$str = "My name is"; $str = preg_replace('/\s\s+/', ' ', $str);
Ausgabe:
quelle
$string = str_replace(" ", "", $string);
Ich glaube, preg_replace würde nach so etwas suchen
[:space:]
quelle
Sie können die Trimmfunktion von PHP verwenden, um beide Seiten (links und rechts) zu trimmen.
trim($yourinputdata," ");
Oder
Sie können auch verwenden
ltrim() - Removes whitespace or other predefined characters from the left side of a string rtrim() - Removes whitespace or other predefined characters from the right side of a string
System: PHP 4,5,7
Docs: http://php.net/manual/en/function.trim.php
quelle
Wenn Sie alle Leerzeichen überall aus $ -Tags entfernen möchten, warum nicht einfach:
str_replace(' ', '', $tags);
Wenn Sie neue Zeilen entfernen möchten und solche, die etwas mehr erfordern würden ...
quelle
Jede mögliche Option besteht darin, einen benutzerdefinierten Datei-Wrapper zum Simulieren von Variablen als Dateien zu verwenden. Sie können dies erreichen, indem Sie Folgendes verwenden:
1) Registrieren Sie zunächst Ihren Wrapper (nur einmal in der Datei, verwenden Sie ihn wie session_start ()):
stream_wrapper_register('var', VarWrapper);
2) Definieren Sie dann Ihre Wrapper-Klasse (sie ist sehr schnell geschrieben, nicht vollständig korrekt, funktioniert aber):
class VarWrapper { protected $pos = 0; protected $content; public function stream_open($path, $mode, $options, &$opened_path) { $varname = substr($path, 6); global $$varname; $this->content = $$varname; return true; } public function stream_read($count) { $s = substr($this->content, $this->pos, $count); $this->pos += $count; return $s; } public function stream_stat() { $f = fopen(__file__, 'rb'); $a = fstat($f); fclose($f); if (isset($a[7])) $a[7] = strlen($this->content); return $a; } }
3) Verwenden Sie dann eine beliebige Dateifunktion mit Ihrem Wrapper für das Protokoll var: // (Sie können sie auch zum Einschließen, Erfordernis usw. verwenden):
global $__myVar; $__myVar = 'Enter tags here'; $data = php_strip_whitespace('var://__myVar');
Hinweis: Vergessen Sie nicht, Ihre Variable im globalen Bereich zu haben (wie global $ __ myVar).
quelle
global $$varname;
Wie schrecklich es 2013 warSie können es mit tun
ereg_replace
$str = 'This Is New Method Ever'; $newstr = ereg_replace([[:space:]])+', '', trim($str)): echo $newstr // Result - ThisIsNewMethodEver
quelle
Sie verwenden auch die
preg_replace_callback
Funktion. und diese Funktion ist identisch mit ihrem Geschwister,preg_replace
außer dass sie eine Rückruffunktion annehmen kann, mit der Sie mehr Kontrolle darüber haben, wie Sie Ihre Ausgabe manipulieren.$str = "this is a string"; echo preg_replace_callback( '/\s+/', function ($matches) { return ""; }, $str );
quelle
preg_replace
?$string = trim(preg_replace('/\s+/','',$string));
quelle
Ist ein alter Beitrag, kann aber so gemacht werden:
if(!function_exists('strim')) : function strim($str,$charlist=" ",$option=0){ $return=''; if(is_string($str)) { // Translate HTML entities $return = str_replace(" "," ",$str); $return = strtr($return, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES))); // Choose trim option switch($option) { // Strip whitespace (and other characters) from the begin and end of string default: case 0: $return = trim($return,$charlist); break; // Strip whitespace (and other characters) from the begin of string case 1: $return = ltrim($return,$charlist); break; // Strip whitespace (and other characters) from the end of string case 2: $return = rtrim($return,$charlist); break; } } return $return; } endif;
Standardfunktionen von trim () können bei HTML-Entitäten problematisch sein. Aus diesem Grund habe ich die Funktion "Super Trim" geschrieben, mit der dieses Problem behoben werden kann. Außerdem können Sie wählen, ob Sie von der Anfangs-, End- oder Standseite der Saite aus zuschneiden möchten.
quelle
Eine einfache Möglichkeit, Leerzeichen aus der gesamten Zeichenfolge zu entfernen, besteht darin, die Explosionsfunktion zu verwenden und die gesamte Zeichenfolge mit einer for-Schleife zu drucken.
$text = $_POST['string']; $a=explode(" ", $text); $count=count($a); for($i=0;$i<$count; $i++){ echo $a[$i]; }
quelle
Das Regex-Argument \ s ist nicht mit UTF-8-Multybyte-Zeichenfolgen kompatibel.
Dieses PHP-RegEx habe ich geschrieben, um dieses Problem mithilfe von PCRE-basierten Argumenten (Perl Compatible Regular Expressions) als Ersatz für UTF-8-Zeichenfolgen zu lösen:
function remove_utf8_whitespace($string) { return preg_replace('/\h+/u','',preg_replace('/\R+/u','',$string)); }
- Anwendungsbeispiel -
Vor:
$string = " this is a test \n and another test\n\r\t ok! \n"; echo $string; this is a test and another test ok! echo strlen($string); // result: 43
Nach:
$string = remove_utf8_whitespace($string); echo $string; thisisatestandanothertestok! echo strlen($string); // result: 28
PCRE-Argumentliste
Quelle: https://www.rexegg.com/regex-quickstart.html
Character Legend Example Sample Match \t Tab T\t\w{2} T ab \r Carriage return character see below \n Line feed character see below \r\n Line separator on Windows AB\r\nCD AB CD \N Perl, PCRE (C, PHP, R…): one character that is not a line break \N+ ABC \h Perl, PCRE (C, PHP, R…), Java: one horizontal whitespace character: tab or Unicode space separator \H One character that is not a horizontal whitespace \v .NET, JavaScript, Python, Ruby: vertical tab \v Perl, PCRE (C, PHP, R…), Java: one vertical whitespace character: line feed, carriage return, vertical tab, form feed, paragraph or line separator \V Perl, PCRE (C, PHP, R…), Java: any character that is not a vertical whitespace \R Perl, PCRE (C, PHP, R…), Java: one line break (carriage return + line feed pair, and all the characters matched by \v)
quelle
Es gibt einige spezielle Arten von Leerzeichen in Form von Tags. Sie müssen verwenden
$str=strip_tags($str);
um redundante Tags und Fehler-Tags zu entfernen und zuerst zu einer normalen Zeichenfolge zu gelangen.
Und verwenden
$str=preg_replace('/\s+/', '', $str);
Es ist Arbeit für mich.
quelle