Les vengo con una burrada, y esto es porque jamas me amigo con las expresiones regulares.
Tengo estas dos funciones:
Código PHP:
// @$texto
function reconocer_links($texto)
{
// TODO: acortar el texto de enlace. Que no pase de la primera barra /
$nuevo_texto = ' ' . $texto;
$nuevo_texto = preg_replace("#([\t\r\n ])([a-z0-9]+?){1}://([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*)?)#i", '\1<a href="\2://\3" target="_blank">\2://\3</a>', $nuevo_texto);
$nuevo_texto = preg_replace("#([\t\r\n ])(www|ftp)\.(([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*)?)#i", '\1<a href="http://\2.\3" target="_blank">\2.\3</a>', $nuevo_texto);
$nuevo_texto = preg_replace("#([\n ])([a-z0-9\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $nuevo_texto);
$nuevo_texto = substr($nuevo_texto, 1);
return $nuevo_texto;
}
// @$texto
function fix_link($texto)
{
if ( strpos($texto, "http://") === false )
return "http://".$texto;
return $texto;
}
La primera la tome del fro y sirve para reconocer links en un trozo de texto. La segunda la ideá yo, y agrega http:// a los links que no tienen ese prefijo. Lo cual es util porque si no el servidor agrega el su nombre al principio del link y quedan enlaces imposibles:
Código HTML:
Ver originalhttp://www.estudiodigital.es/galeria/albums/ver/31/www.flickr.com/www.flickr.com/www.flickr.com/www.flickr.com/tamarit
La cuestion es que no me sirven para trabajar en conjunto, porque la primera corrige parrafos enteros, mientras que la segunda solo corrige un link en particular. Y estoy un tanto disperso. Que solución me recomiendan, que no sea necesariamente de expresiones regulares, para agregar http:// a los links del parrafo que no lo tienen? (modificar la reg exp sería lo mejor, claro)
Saludos!