W3docs

nl2br()

Die PHP-Funktion nl2br() fügt vor jedem Zeilenumbruch in einem String ein HTML-Zeilenumbruch-Tag ein. Syntax, Parameter und Anwendungsbeispiele.

Die PHP-Funktion nl2br() fügt vor jedem Zeilenumbruchzeichen (\n, \r\n, \r oder \n\r) in einem String einen HTML-Zeilenumbruch (<br /> oder <br>) ein. Sie ist eine der am häufigsten verwendeten Funktionen in der PHP-Webentwicklung, da Zeilenumbrüche in reinem Text – also die, die ein Nutzer mit der Eingabetaste eingibt oder die aus einer Datenbank stammen – in HTML unsichtbar sind. Browser komprimieren Leerzeichen, sodass eine mehrzeilige Nachricht, die direkt in eine Seite ausgegeben wird, als eine einzige zusammenhängende Zeile erscheint. nl2br() überbrückt diese Lücke, indem es jeden Zeilenumbruch in ein Markup umwandelt, das der Browser tatsächlich berücksichtigt.

Dieses Kapitel behandelt die Syntax, den Parameter $is_xhtml, was nl2br() verändert (und was nicht), den typischen Anwendungsfall mit Nutzereingaben sowie den Sicherheitshinweis, den man unbedingt beachten muss.

Syntax

nl2br(string $string, bool $use_xhtml = true): string
ParameterBeschreibung
$stringDer zu verarbeitende Eingabe-String. Pflichtangabe.
$use_xhtmlOptional. Gibt an, ob XHTML-kompatible <br />-Tags ausgegeben werden sollen. Standard: true. Bei false werden einfache <br>-Tags verwendet.

Die Funktion gibt einen neuen String mit den eingefügten Umbrüchen zurück; PHP-Strings sind unveränderlich, der ursprüngliche $string bleibt unverändert.

Einfaches Beispiel

php— editable, runs on the server

Ausgabe (der rohe HTML-Code, den der Browser empfängt):

Hello<br />
World!

Zu beachten: Das ursprüngliche \n bleibt erhaltennl2br() fügt das <br /> vor dem Zeilenumbruch ein, ersetzt ihn aber nicht. Das ist beabsichtigt: So bleibt der Quellcode beim Betrachten des Seitenquelltexts lesbar, während das <br /> den sichtbaren Zeilenumbruch erzwingt.

Tag-Stil mit $use_xhtml steuern

Übergebe false als zweites Argument, um HTML5-konforme <br>-Tags anstelle der selbstschließenden XHTML-Form zu erhalten:

<?php
echo nl2br("Line 1\nLine 2", false);
?>

Ausgabe:

Line 1<br>
Line 2

Verwende <br /> (Standard) für XHTML- oder XML-Dokumente; beide Formen sind in HTML5 gültig, daher funktioniert der Standard nahezu überall.

Der eigentliche Anwendungsfall: Nutzereingaben

Die Funktion entfaltet ihre Stärke, wenn Text ausgegeben wird, den ein Nutzer in einem <textarea>-Feld eingegeben hat. Browser ignorieren die eingegebenen Zeilenumbrüche, sodass ein mehrabsätziger Kommentar ohne nl2br() als ein einziger Block dargestellt wird. Dabei gilt eine wichtige Reihenfolgeregel: Zuerst escapen, dann umbrechen. Wird nl2br() auf rohe Eingaben angewendet, werden zwar Zeilenumbrüche erhalten, aber XSS-Angriffe bleiben möglich, da nl2br() kein HTML escaped – es fügt lediglich <br>-Tags hinzu.

<?php
$comment = "Hi there\nThanks for the great post!";

// Correct order: escape the HTML, THEN convert newlines.
echo nl2br(htmlspecialchars($comment));
?>

htmlspecialchars() neutralisiert alle <, > oder &-Zeichen, die der Nutzer eingegeben hat, und nl2br() fügt danach sichere <br />-Tags ein. Die Reihenfolge umzukehren – htmlspecialchars(nl2br($comment)) – würde die eigenen <br />-Tags in sichtbaren Text wie &lt;br&gt; umwandeln, sodass die Umbrüche nie dargestellt würden.

Häufige Fallstricke

  • Der Zeilenumbruch wird nicht entfernt oder ersetzt. Das \n bleibt im String erhalten. Wenn der Zeilenumbruch entfernt werden soll, muss anschließend str_replace() verwendet werden.
  • Es handelt sich um keine Sicherheitsfunktion. nl2br() führt kein Escaping durch. Immer in Kombination mit htmlspecialchars() bei nicht vertrauenswürdigen Eingaben verwenden.
  • Es wirkt nur auf Zeilenumbruchzeichen, nicht auf den Zeilenumbruch durch <textarea>-Wrapping oder Wortumbruch – diese sind rein visuell und erreichen das Skript nie.
  • Nur für reinen Text geeignet. Die Ausgabe als E-Mail-Text oder in eine CSV-Datei zu schreiben ist sinnlos; die <br>-Tags sind HTML und haben außerhalb eines Browsers keine Bedeutung.

Verwandte Funktionen

  • htmlspecialchars() — Sonderzeichen vor der Ausgabe escapen (zusammen mit nl2br() verwenden).
  • str_replace() — Teilstrings ersetzen, z. B. um Zeilenumbrüche vollständig zu entfernen.
  • strip-tags() — HTML-Tags aus einem String entfernen.
  • trim() — Führende und nachfolgende Leerzeichen einschließlich überflüssiger Zeilenumbrüche entfernen.

Übung

Übung
Was macht die Funktion nl2br() in PHP?
Was macht die Funktion nl2br() in PHP?
Was this page helpful?