Buscando en php.net
http://es2.php.net/manual/es/function.preg-replace.php , he encontrado una funcioncilla que lo mismo te puede servir bastante:
Código PHP:
function n3y_url_shorten($url,$chr_limit = 25,$add = '...') {
return preg_replace("!(http:/{2}[\w\.]{2,}[/\w\-\.\?\&\=\#]*)!e", "'<a href=\"\\1\" title=\"\\1\" target=\"_blank\">'.(strlen('\\1')>=$chr_limit ? substr('\\1',0,$chr_limit).'$add':'\\1').'</a>'", $url);
}
$a="Esta es mi cadena con enlaces de más de 25 caracteres y otros de menos http://forosdelweb.com http://forosdelweb.com/newreply.php?do=newreply&p=1184684 kjjgkdfjkjdf";
print n3y_url_shorten($a);
Ya tienes varias soluciones según tus necesidades