Dies scheint ein Betrug zu sein, aber seien Sie versichert, dass dies nicht der Fall ist. Ich habe sowohl SO als auch den Rest des Webs nach einer Antwort auf mein Problem durchsucht und immer wieder dieselben unzureichenden "Lösungen" gefunden. Wie auch immer, hier geht es:
Ich speichere Benutzereingaben aus einem Textbereich in eine MySQL-Datenbank (in einer WordPress-Umgebung, aber das sollte für dieses Problem meiner Meinung nach keine Rolle spielen). Es wird später aus der Datenbank abgerufen und den Administratoren im Backend der Site angezeigt. Das Problem tritt auf, wenn Benutzer Text mit Zeilenumbrüchen senden (dh die Eingabetaste drücken).
Eine Beispielzeichenfolge könnte folgendermaßen aussehen:
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!
Greetings,
Bill
Die Zeichenfolge enthält keine Zeilenendezeichen ("\ n", "\ r" oder ähnliches).
Ich verwende nl2br()
es, um eine HTML-Ausgabe zu generieren, aber das reicht nicht aus. Das Ergebnis ist dann:
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill
Was ist nl2br()
meines Wissens das erwartete Ergebnis, da dadurch die Tags eingefügt werden und die Zeilenumbrüche nicht ersetzt werden sollen?
Das Format, das ich brauche, wäre jedoch folgendes:
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br /><br />Greetings,<br />Bill
Wenn die Zeichenfolge EOL-Zeichen wie "\ n" enthalten würde, würde ich sie entweder mit str_replace()
oder drücken preg_replace()
und damit fertig sein, aber ich habe keine Ahnung, welche Nadel eine dieser Funktionen füttern soll, wenn dort keine Zeichen vorhanden sind an erster Stelle.
Ich kann manuell auf das entsprechende Feld in der Datenbank zugreifen, bei jedem Zeilenumbruch die Rücktaste drücken und was ich später mit der Zeichenfolge tun möchte, funktioniert. Ich weiß also, dass ich das obige Format brauche.
Antworten:
Sie sollten in der Lage sein, es durch ein Preg zu ersetzen, das alle Zeilenumbrüche und Wagenrückläufe entfernt. Der Code lautet:
Auch wenn die
\n
Zeichen nicht angezeigt werden, befindet sich dort ein unsichtbares Zeichen, wenn Sie Wagenrückläufe erhalten. Der Preg-Ersatz sollte diese greifen und reparieren.quelle
/\r|\n|\r\n/
Bens Lösung ist akzeptabel, aber str_replace () ist weitaus schneller als preg_replace ()
Mit weniger CPU-Leistung werden die weltweiten Kohlendioxidemissionen reduziert.
quelle
quelle
Das liegt daran
nl2br()
, dass neue Zeilen überhaupt nicht entfernt werden.Verwenden Sie
str_replace
stattdessen:quelle
Sie können auch PHP-Trim verwenden
quelle
Um auch unter Windows richtig zu funktionieren, würde ich empfehlen, zu verwenden
"\r\n"
- für Windows,"\r"
- für Mac und"\n"
- für Linuxquelle
\r
und\n
in der Zeichenfolge entfernt werden, warum sollte dies nicht für diejenigen der Fall sein, die direkt aufeinander folgen?\r\n
unter Windows verwendet und es hat unter Linux nicht funktioniert.\r\n
FIRST würde also helfen, da dies für jeden Teil ein Komma anstelle von zwei bedeutet, wenn dieser Zeilenumbruch\r\n
zuerst, dann ersetzen wir\r
und\n
ich habe meine Antwort bearbeitet.\r
und\r
keine Entfernung erforderlich ist,\r\n
können Sie den Benutzer verwendenstr_replace(array("\r","\n"), "", $buffer);
, um das gleiche Ergebnis zu erzielen.str_replace (PHP_EOL, null, $ str);
quelle
Etwas etwas funktionaler (überall einfach zu bedienen):
Die Verwendung von PHP_EOL als Suchersatzparameter ist ebenfalls eine gute Idee! Ein großes Lob.
quelle
Alternative eingebaute: trim ()
Es dient dazu, Zeilenumbrüche aus verschiedenen Arten von Textdateien zu entfernen, verarbeitet jedoch kein HTML.
quelle
Ich benutze 3 Zeilen, um diesen Job zu machen, also betrachte $ s als dein "Zeug" ...
quelle