27apricot
Erfahrenes Mitglied
Hallo,
ich bastel gerade an einer Funktion, die Text aus der Datenbank in HTML überträgt. Dabei möchte ich Zeilenumbrüche nicht durch nl2br() in breaks umwandeln, sondern jeden Absatz zu einem neuen Textabsatz <p>...</p> machen.
Die Funktion:
Das funktioniert eigentlich prima. Aber nur, wenn es irgendwo im Text eine Leerzeile gibt, also einen doppelten Zeilenumbruch. Gibt es diesen nicht, werden nicht nur die einzelnen Zeilen zu Absätzen gemacht, sondern auch nochmal der gesamte Text.
Beispiel:
wird zu
Mit Leerzeile aber:
wird es zu dem gewünschten
Ich versteh' Bahnhof.
Vielen Dank im Voraus:
27apricot
ich bastel gerade an einer Funktion, die Text aus der Datenbank in HTML überträgt. Dabei möchte ich Zeilenumbrüche nicht durch nl2br() in breaks umwandeln, sondern jeden Absatz zu einem neuen Textabsatz <p>...</p> machen.
Die Funktion:
PHP:
$suchen = array(
'~^(.+)\r~', // P: erste Zeile
'~\n(.+)$~', // P: letzte Zeile
'~\n(.+)\r~', // P: alle weiteren Zeilen
'~^(.+)$~', // P: einzelne Zeile
'~\n\r~', // P: leere Zeile
);
$ersetzen = array(
'<p>\1</p>',
'<p>\1</p>',
'<p>\1</p>',
'<p>\1</p>',
'<p><br /></p>',
);
return preg_replace($suchen, $ersetzen, $text);
Das funktioniert eigentlich prima. Aber nur, wenn es irgendwo im Text eine Leerzeile gibt, also einen doppelten Zeilenumbruch. Gibt es diesen nicht, werden nicht nur die einzelnen Zeilen zu Absätzen gemacht, sondern auch nochmal der gesamte Text.
Beispiel:
Code:
Zeile 1
Zeile 2
Code:
<p><p>Zeile 1</p><p>Zeile 2</p></p>
Code:
Zeile 1
Zeile 2
Code:
<p>Zeile 1</p><p><br /></p><p>Zeile 2</p>
Ich versteh' Bahnhof.
Vielen Dank im Voraus:
27apricot