Schreib \n in einen String in doppelten Anführungszeichen, um eine neue Zeile auszugeben: echo "Line 1\nLine 2";. Die Konstante PHP_EOL macht dasselbe und liest sich am Zeilenende klarer: echo 'Done' . PHP_EOL;. Auf einer Webseite erscheint ein Zeilenumbruch nicht als Umbruch; dort brauchst du <br> oder nl2br().
Einfache vs doppelte Anführungszeichen
Escape-Sequenzen wie \n und \t funktionieren nur in doppelten Anführungszeichen. In einfachen ist '\n' zwei Zeichen: ein Backslash und der Buchstabe n. Das ist der übliche Grund für „\n funktioniert nicht“.
Die Seite zu Strings listet jede Escape-Sequenz auf, die doppelte Anführungszeichen verstehen.
PHP_EOL vs "\n"
PHP_EOL ist das Zeilenende des Systems, auf dem PHP läuft: "\n" unter Linux und macOS, "\r\n" unter Windows. Verwende es für Terminalausgaben und Dateien, die du auf demselben Rechner liest. Wenn ein Format sein eigenes Zeilenende festlegt, verwendest du dieses: HTTP-Header und E-Mails brauchen "\r\n", und die meisten Werkzeuge lesen "\n" überall problemlos.
"\r" ist ein Wagenrücklauf, "\n" ein Zeilenvorschub. Windows-Dateien beenden Zeilen mit beiden, "\r\n", und deshalb enthält Text von einem Windows-Nutzer oder aus einer <textarea> oft \r-Zeichen, mit denen du nicht gerechnet hast.
Neue Zeile in HTML: br und nl2br
Ein Browser fasst Zeilenumbrüche zu einem einzigen Leerzeichen zusammen, also zeigt echo "a\nb" auf einer Seite a b. Gib entweder selbst <br> aus oder behalte die Zeilenumbrüche im Text und wandle sie mit nl2br() um, das vor jedem ein <br /> einfügt. Führe das aus und vergleiche die Tabs Output und Page:
Im Tab Output sehen alle drei ähnlich aus. Im Tab Page läuft der erste Text in einer Zeile zusammen, nl2br() bricht ihn um, und <pre> behält die Zeilenumbrüche, wie sie geschrieben sind.
Textarea-Eingaben mit ihren Zeilenumbrüchen anzeigen
Text aus einer <textarea> behält die Zeilen, die der Nutzer getippt hat, aber du musst ihn escapen, bevor du ihn in HTML ausgibst. Die Reihenfolge zählt: zuerst htmlspecialchars(), dann nl2br(), sonst würden die <br />-Tags selbst escapt. Führe es aus, tippe ein paar Zeilen ins Feld und klicke auf Preview: Dasselbe Skript läuft erneut, mit gefülltem $_POST.
Ein Zeilenumbruch aus einer Textarea kann als "\r\n" oder als "\n" ankommen; beide enthalten "\n", also funktioniert das Zählen dieses Zeichens in beiden Fällen. htmlspecialchars() erklärt, warum das Escapen hier nicht optional ist.
Einen String nach Zeilenumbruch aufteilen
explode("\n", $text) funktioniert für Text, den du selbst erzeugt hast. Bei Text von Nutzern oder aus Dateien können die Zeilenenden "\r\n", "\n" oder "\r" sein; preg_split('/\R/', $text) kommt mit allen zurecht, weil \R jeden Zeilenumbruch trifft.
Zeilenumbrüche aus einem String entfernen
Um mehrzeiligen Text zu einer Zeile zu machen, ersetzt du jede Art von Zeilenende. Ersetze "\r\n" vor den einzelnen Zeichen, sonst würde jeder Windows-Zeilenumbruch zu zwei Leerzeichen:
trim() und rtrim() entfernen Zeilenumbrüche an den Enden eines Strings, aber nie in der Mitte, also sind sie das richtige Werkzeug für eine Zeile aus einer Datei und das falsche, um Zeilen zu verbinden.
Häufig gestellte Fragen
Wie gebe ich in PHP mit echo eine neue Zeile aus?
Setze \n in einen String in doppelten Anführungszeichen: echo "Line 1\nLine 2";. Oder häng die Konstante an: echo 'Line 1' . PHP_EOL;. Im Browser wird ein Zeilenumbruch nicht angezeigt; dort verwendest du <br> oder nl2br().
Warum funktioniert \n in PHP nicht?
Entweder steht der String in einfachen Anführungszeichen, wo '\n' ein Backslash und ein n ist, oder die Ausgabe wird als HTML angezeigt, wo der Browser einen Zeilenumbruch wie ein Leerzeichen behandelt. Verwende "\n" in doppelten Anführungszeichen für Textausgabe und nl2br() oder <br> für Webseiten.
Was ist PHP_EOL?
Eine Konstante mit dem Zeilenende des Betriebssystems, auf dem PHP läuft: "\n" unter Linux und macOS, "\r\n" unter Windows. Verwende sie für Ausgaben ins Terminal oder in lokale Dateien; bei HTTP, E-Mails und CSV-Dateien legt meist das Format das Zeilenende fest, unabhängig vom Betriebssystem.
Was macht nl2br in PHP?
nl2br($text) fügt vor jedem Zeilenumbruch im String ein <br /> ein, sodass Text aus einer <textarea> seine Zeilen behält, wenn er in HTML angezeigt wird. Escape zuerst: nl2br(htmlspecialchars($text)).
Wie entferne ich in PHP Zeilenumbrüche aus einem String?
Ersetze alle drei Arten von Zeilenenden: str_replace(["\r\n", "\r", "\n"], ' ', $text) oder mit einem regulären Ausdruck preg_replace('/\R/', ' ', $text). Um nur den Zeilenumbruch am Ende zu entfernen, verwendest du rtrim($text, "\r\n").