Andreas-Loibl.de Programmieren :: PHP
Hintergrundbild

Zeilenumbruch, aber nicht in HTML-Tags

Problem:

Manchmal will man einen Text HTML-formatiert ausgeben und dazu einen Text nach z.B. max. 80 Zeichen mit <br /> umbrechen. Dazu gibt es zwar auch die PHP-Funktion wordwrap, allerdings kann es bei dieser vorkommen, dass HTML-Codes (z.B. Links) von dem Trennstring durchbrochen werden

Beispiel:

$text = "Der schnelle braune Fuchs sprang über den faulen Hund.";
$neuertext = wordwrap( $text, 20, "<br />" );
 
ergibt folgendes:
 
Der schnelle braune <br />
Fuchs sprang über <br />
den faulen Hund.
ABER:
$text = 'Das ist eine tolle Suchmaschine:
<a href="http://www.google.de/ target="_blank">http://www.google.de</a>';
$neuertext = wordwrap( $text, 20, "<br />" );
 
ergibt folgendes:
 
Das ist eine tolle <br />
Suchmaschine: <br />
<a <br />
href="http://www.google.de/ <br />
target="_blank>http://www.google.de</a> 
 
Dadurch wird der HTML-Code zerstört.

Lösung:

Mit folgender Funktion kann man einen Text nach $wrap_at Zeichen (Standart: 80) mit $wrap_code (Standart: "\n") umbrechen, aber nur wenn er nicht zwischen < und > steht:

function wrapText($code, $wrap_at = 80, $wrap_code = "\n")
{
  return preg_replace('%(\s*)([^>]{'.$wrap_at.',})(<|$)%Ue',
  "'\\1'.wordwrap('\\2', '".$wrap_at."', '$wrap_code', 1).'\\3'", $code);
}