Wie kann ich Zeilenumbruch oder \ r \ n durch <br/> ersetzen?


74

Ich versuche einfach einige neue Zeilen zu ersetzen und habe drei verschiedene Möglichkeiten ausprobiert, aber ich bekomme keine Änderung:

$description = preg_replace('/\r?\n|\r/', '<br/>', $description);
$description = str_replace(array("\r\n", "\r", "\n"), "<br/>", $description);
$description = nl2br($description);

Diese sollten alle funktionieren, aber ich bekomme immer noch die Zeilenumbrüche. Sie sind doppelt: "\ r \ r". Das sollte keines davon zum Scheitern bringen, oder?


1
Warum hast du nackte \rZeilenumbrüche? AFAIK wechselte sogar zu MacOSX \n.
ThiefMaster

Sie kommen aus der CSV eines Kunden.
Theflowersoftime

Antworten:


134

Es gibt bereits die nl2br()Funktion, die <br> Tags vor neuen Zeilenzeichen einfügt :

Beispiel ( Codepad ):

<?php
// Won't work
$desc = 'Line one\nline two';
// Should work
$desc2 = "Line one\nline two";

echo nl2br($desc);
echo '<br/>';
echo nl2br($desc2);
?>

Wenn es immer noch nicht funktioniert, stellen Sie sicher, dass der Text $desciptionin doppelten Anführungszeichen steht.

Dies liegt daran, dass einfache Anführungszeichen Escape-Sequenzen wie den \nVergleich mit Zeichenfolgen in doppelten Anführungszeichen nicht erweitern . Zitat aus der PHP-Dokumentation:

Hinweis : Im Gegensatz zu den Syntaxen in doppelten Anführungszeichen und Heredoc werden Variablen und Escape-Sequenzen für Sonderzeichen nicht erweitert, wenn sie in Zeichenfolgen in einfachen Anführungszeichen vorkommen.


Schauen Sie genauer hin, er das OP zeigt ausdrücklich, dass sie versucht haben zu verwenden nl2brund dass es nicht funktioniert hat.
Tim Bielawa

Ich habe gerade versucht, nl2br auf einem String mit doppeltem Wagenrücklauf auszuführen, und es hat gut funktioniert.
Decko

1
Schau dir meine Bearbeitung @ThomasMcCabe an. Ich habe einige (vielleicht) nützliche Informationen hinzugefügt.
Robik

21
Bitte beachten Sie, dass nl2brsich nicht ersetzen , sondern EINSÄTZE vor Zeilenumbrüche, die die nl Zeichen und verleiht ihm br bevor sie verlässt.
Brock Hensley

Aber wenn wir eine Datei mit Zeilenumbrüchen haben und diese mit einem PHP-Skript lesen und diese Zeilenumbrüche interpretieren möchten, wie geht das?
user3911183

61

Versuchen Sie Folgendes:

$description = preg_replace("/\r\n|\r|\n/", '<br/>', $description);

12
Eine schnellere Alternative könnte $description = str_replace(["\r\n", "\r", "\n"], "<br/>", $description)aus dieser Antwort
Keale

7
(Man könnte auch nur /\R/für alle CR / LF- Zeilenumbruchkombinationen verwenden.)
Mario

17

Möglicherweise haben Sie echte Zeichen "\" in der Zeichenfolge (die Zeichenfolgen in einfachen Anführungszeichen, wie @Robik gesagt).

Wenn Sie sich ziemlich sicher sind, dass die Zeichenfolgen '\ r' oder '\ n' ebenfalls ersetzt werden sollten, spreche ich hier nicht von Sonderzeichen, sondern von einer Folge von zwei Zeichen '\' und 'r', dann entkommen Sie dem '\ 'in der Ersetzungszeichenfolge und es wird funktionieren:

str_replace(array("\r\n","\r","\n","\\r","\\n","\\r\\n"),"<br/>",$description);

nl2br ist nett, aber das funktioniert tatsächlich (für meine json-Sachen), danke!
Valmond

6

nl2br() wie Sie haben, sollte es gut funktionieren:

$description = nl2br($description);

Es ist wahrscheinlicher, dass das nicht geschlossene 'in der ersten Zeile Ihres Beispielcodes Ihr Problem verursacht. Entfernen Sie die 'after $ description ...

...$description');

5

Versuche dies:

echo str_replace(array('\r\n', '\n\r', '\n', '\r'), '<br>', $description);

2
Lesen Sie mehr über PHP- Strings . '\r\n'ist nicht dasselbe wie "\r\n".
Axiac

Danke @axiac, ich habe keine Zeit zum Testen, aber du meinst, es sollte so etwas wie "\r\n"richtig sein?
l2aelba

3

Dies wird sicher funktionieren:

str_replace("\\r", "<br />", $description); 
str_replace("\\n", "<br />", $description); 

Absolut falscher Vorschlag. "foo \\ r \\ nbar" wird zu "foobar" anstelle von "foo <br/> bar". Vor dem Ersetzen von HTML wird "foo bar" gerendert.
Artemix

Meh. Funktioniert in bestimmten Fällen, in denen die Eingabe ein bekanntes Format hat.
evandentremont

3

nl2br () hat bei mir funktioniert, aber ich musste die Variable in doppelte Anführungszeichen setzen:

Das funktioniert:

$description = nl2br("$description");

Das funktioniert nicht:

$description = nl2br($description);

Was ist die Erklärung?
Peter Mortensen



-3

Wenn Sie verwenden nl2br, werden alle Vorkommen von \nund \rdurch ersetzt <br>. Aber wenn Sie (ich weiß nicht, wie es ist) immer noch neue Zeilen erhalten, können Sie diese verwenden

str_replace("\r","",$description);
str_replace("\n","",$description);

unnötige neue Zeilen durch eine leere Zeichenfolge zu ersetzen.


2
Sie werden nicht ersetzt
Brock Hensley

\rin str_replacescheint alles zu ersetzen. Und außerdem sollten Sie es ersetzen durch <br>...
Willem Van Onsem
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.