Frank S.: Automatisches Generieren von Links in PHP

Beitrag lesen

Hallo zusammen,

Ich hab im Internet eine ganz nützliche PHP-Funktion gefunden, die in einem Text nach Teilen sucht, die wie Links aussehen und diese dann verlinkt:

function links($text) {  
  $text = html_entity_decode($text);  
  $p[] = '"(( |^)((ftp|http|https){1}://)[-a-zA-Z0-9@:%_+.~#?&//=]+)"i';  
  $r[] = '<a href="$1" target="_blank">\1</a>';  
  $p[] = '"( |^)(www.[-a-zA-Z0-9@:%_+.~#?&//=]+)"i';  
  $r[] = '\1<a href="http://\2" target="_blank">\\2</a>';  
  $p[] = '"([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3})"i';  
  $r[] = '<a href="mailto:\1">\\1</a>';  
  $text = preg_replace($p, $r, $text);  
  return $text;  
} 

Funktioniert soweit auch ganz gut, AAAAAABER sobald ich im Text einen Zeilenumbruch drin habe klappt es leider nicht mehr. Ich kenne mich mit regulären Ausdrücken leider nicht gut genug aus, um den Fehler zu finden.

Ich hab mal versucht, das <br /> was durch html_entity_decode generiert wird, zu entfernen, indem ich die zweite Zeile durch folgende ersetze:
$text = html_entity_decode(str_replace(array('<br />', '<br>', '<br/>'), '',$text));

Leider funktioniert es damit auch nicht.

Hat jemand eine Idee, wie ich die Funktion entsprechend anpassen könnte, damit sie auch bei Zeilenumbrüchen im Text funktioniert - ohne die Zeilenumbrüche zu entfernen?