urlは正規表現でとってこればいいんじゃないのかね
$res = preg_replace('/(https?|ftp)(:\/\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+))/',"<a href=\"$0\">$3</a>",$text);

こんな感じで