Din:
function url2link($txt)
{
$domain_match = "[a-z0-9@:\-\.]+";
$url_match = $domain_match."(\/[a-z0-9_\-\.\/]+)?(\?[a-z0-9=&%]+)?";
$trans_arr = array(
"/[a-z0-9_\-\.]+@$domain_match/i" => "<a href='mailto:\\0'>\\0</a>",
"/(ftp|https?):\/\/$url_match/i" => "<a href='\\0' target='_blank'>\\0</a>",
"/(^| )(www\.$url_match)/im" => "\\1<a href='
http://\\2' target='_blank'>\\2</a>"
);
return preg_replace(array_keys($trans_arr), array_values($trans_arr), $txt);
}
Det var lang tid siden jeg havde lavet noget ligende, og jeg kunne ikke lige finde det jeg havde lavet før, så her er en ny:
function url2link($txt)
{
$username = "[a-z0-9_\-]+";
$password = "[a-z0-9_\-!#]+";
$host = "[a-z0-9\-]+\.[a-z0-9\-\.]+";
$port = "\d{1,5}";
$path = "\/[a-z0-9\/\-\.\(\)\%]+";
$querystr = "\?[a-z0-9&=\-\.%\(\)]+";
$proto = "(https?|ftp):\/\/";
$url = "$host(:$port)?($path($querystr)?)?";
$protodomain = "/$proto(($username(:$password)?@)?$url)/i";
$domain = "/(^| )(www\.$url)/im";
$protomail = "/mailto:($username@$host)/i";
$mail = "/(^| )($username@$host)/im";
$replacements = array(
$protodomain => "<a href=\"\\0\" target=\"_blank\">\\2</a>"
,$domain => "\\1<a href=\"
http://\\2\" target=\"_blank\">\\2</a>"
,$protomail => "<a href=\"\\0\">\\1</a>"
,$mail => "\\1<a href=\"
http://\\2\">\\2</a>" );
return preg_replace( array_keys( $replacements ), array_values( $replacements ), $txt );
}
Ved godt at min er lidt større, ved ikke lige hvad der skete ;)
Bemærk at
http://example.dk?var=1 ikke er en gyldig URL!