Moin!
Ja, ja, ich weiß, wurde schon oft gefragt, hab auch einiges dazu gefunden. Hab jetzt aber trotzdem noch ne Frage, weil ich das mit den regulären Ausdrücken immer noch nicht ganz durchschaut habe.
Weil ich von den vielen Möglichkeiten gar nicht mehr wusste, wie ich es nun am besten machen soll, hab ich mir mal phpBB runtergelden und geschaut wie die das gemacht haben.
Demnach soll alles verlinkt werden, was mit "xxxx://yyyy" bzw "www." beginnt und vor space, neue Zeile, Komma, double quote oder < endet.
Nun nimmt er das Komma aber doch in den Link hinein, wenn der mit http:// (also http://xyz.xyz, bla) beginnt, wenn man nur www.xyz.xyz schreibt klappts dagegen.
Kann mir das jemand erklären?
Hier die Funktion aus phpBB:
function make_clickable($text)
{
// pad it with a space so we can match things at the start of the 1st line.
$ret = ' ' . $text;
// matches an "xxxx://yyyy" URL at the start of a line, or after a space.
// xxxx can only be alpha characters.
// yyyy is anything up to the first space, newline, comma, double quote or <
$ret = preg_replace("#(^|[\n ])([\w]+?://.*?[^ "\n\r\t<]*)#is", "\1<a href="\2" target="_blank">\2</a>", $ret);
$ret = preg_replace("#(^|[\n ])([\w]+?://.*?[^ "\n\r\t<]*)#is", "\1<a href="\2" target="_blank">\2</a>", $ret);
// matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing
// Must contain at least 2 dots. xxxx contains either alphanum, or "-"
// zzzz is optional.. will contain everything up to the first space, newline,
// comma, double quote or <.
$ret = preg_replace("#(^|[\n ])((www|ftp).[\w-]+.[\w-.~]+(?:/[^ "\t\n\r<]*)?)#is", "\1<a href="http://\2" target="_blank">\2</a>", $ret);
// matches an email@domain type address at the start of a line, or after a space.
// Note: Only the followed chars are valid; alphanums, "-", "_" and or ".".
$ret = preg_replace("#(^|[\n ])([a-z0-9&-_.]+?)@([\w-]+.([\w-.]+.)*[\w]+)#i", "\1<a href="mailto:\2@\3">\2@\3</a>", $ret);
// Remove our padding..
$ret = substr($ret, 1);
return($ret);
}
Danke! Tom