Está medio enredado, pero ahora no tengo tiempo de depurarlo, fijate si así te va mejor:
Código PHP:
<?php
function get_links($string) {
$patron='/\<a href\=(.*?)\>(.*?)\<\/a\>/is';
preg_match_all ($patron, $string,$coincidencias);
return $coincidencias[0];
};
function get_links_text($string) {
$patron='#[^<ref=">]http\:\/\/([^"<>]*)#is';
preg_match_all ($patron, $string,$coincidencias);
return $coincidencias[0];
};
function redlink($link,$largopartes){
$patron='/\<a href\=(.*?)\>(.*?)\<\/a\>/i';
preg_match_all ($patron, $link,$coincidencias);
$s='/\<a href\=(.*?)\>(.*?)\<\/a\>/se';
if(strlen($coincidencias[2][0])>($largopartes<<1))
$r='"<a href=$1>".substr("$2",0,"$largopartes")."...".substr("$2","-$largopartes")."</a>"';
else
$r='"<a href=$1>$2</a>"';
$t=preg_replace ($s, $r, $link);
return $t;
}
function redlink2($link,$largopartes){
if(strlen($link)>($largopartes<<1))
$r='<a href="'.$link.'">'.substr($link,0,$largopartes).'...'.substr($link,-$largopartes).'</a>';
else
$r='<a href="'.$link.'">'.$link.'</a>';
return $r;
}
$cadena='hola http://www.akjhas.dasa/asasa/asasasas/asas.pl <br><a href="http://www.google.com.ar">Este es un magnífico buscador y en él hay de todo</a>';
$links=get_links($cadena);
$urls=get_links_text($cadena);
foreach($links as $v){
$replace[]=redlink($v,5);
}
foreach($urls as $v){
$replace[]=redlink2($v,5);
}
$search=array_merge($links,$urls);
echo str_replace($search,$replace,$cadena);
?>