1. Einleitung
Um in einem String, der nur „normale” Zeilenumbrüche („\n”) enthält auch solche HTML-Zeilenumbrüche einzufügen, die von einem Browser interpretiert werden („<br />”), kann nl2br($string) verwendet werden. Diese Funktion ersetzt jedes „\n” im String automatisch durch ein „<br />\n”. Nützlich ist nl2br() typischerweise beim Darstellen von Daten, die Benutzer einer Webseite in Formulare eingegeben haben — etwa bei Kommentarfunktionen, Foren oder Gästebüchern. Die abgesendeten Daten enthalten nur „normale” Zeilenumbrüche und kein HTML (bzw. darin enthaltenes HTML sollte in den meisten Fällen aus Sicherheitsgründen codiert werden).
2. Beispiel zu nl2br
In diesem Beispiel wird ein String aus drei Zeilen definiert, die jeweils ein Wort enthalten („Zeile1”, „Zeile2” und „Zeile3”). Dieser String wird zuerst ohne Verwendung von nl2br() ausgegeben und danach mit. Entsprechend enthält die zweite Ausgabe auch HTML-Zeilenumbrüche.
<?php $str = "Zeile1\nZeile2\nZeile3"; var_dump($str); var_dump(nl2br($str)); ?>
string(20) "Zeile1 Zeile2 Zeile3" string(32) "Zeile1<br /> Zeile2<br /> Zeile3"
3. Eigene Funktion
Die Funktionalität von nl2br() lässt sich leicht durch eine eigene Funktion nachbilden. Dafür kann schon str_replace($search, $replace, $subject) ausreichen.
<?php function myNl2br($str) { return str_replace("\n", "<br />\n", $str); } $str = "Zeile1\nZeile2\nZeile3"; var_dump($str); var_dump(myNl2br($str)); ?>
string(20) "Zeile1 Zeile2 Zeile3" string(32) "Zeile1<br /> Zeile2<br /> Zeile3"
4. Performance von nl2br
Mit dem nachfolgenden Skript wird die Performance von nl2br() bei Anwendung auf einen Beispielstring getestet. Dazu wird nl2br() eine Million mal angewendet und die verstrichene Zeit gemessen. Um das Ergebnis besser einordnen zu können (letztlich hängt es vom verwendeten System ab), wird zusätzlich eine Million mal ein leerer String per echo ausgegeben. Den Ausgaben des Skripts kann entnommen werden, dass die Anwendung von nl2br() auf den Beispielstring etwa 20 mal mehr Zeit benötigt, als ein leeres echo auszuführen. Da nl2br() beim Generieren einer Seite nur selten öfter als 20 Mal ausgeführt wird, ist der Zeitbedarf der Funktion demnach vernachlässigbar.
<?php // Anzahl Iterationen define('ITERATIONS', pow(10, 6)); // Beispieltext $str = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.'; // nl2br $starttime = microtime(true); for ($x=0; $x<ITERATIONS; $x++) { nl2br($str); } echo "nl2br: " . ITERATIONS . " mal in " . round(microtime(true) - $starttime, 2) . " Sekunden ausgefuehrt.\n"; // leeres echo $starttime = microtime(true); for ($x=0; $x<ITERATIONS; $x++) { echo ""; } echo "echo: " . ITERATIONS . " mal in " . round(microtime(true) - $starttime, 2) . " Sekunden ausgefuehrt."; ?>
nl2br: 1000000 mal in 3.27 Sekunden ausgefuehrt. echo: 1000000 mal in 0.15 Sekunden ausgefuehrt.