Hay veces que implementamos funciones de parseo de feeds o de apis de twitter pero las URLs que salen no salen con los tags de link. Pues bien os muestro cómo hacer una función para que detecte los enlaces y los linke a su destino.

     function textLink($text) {
          // por si empieza con un usuario de twitter
          $text = " ".$text;
 
          //busca URLs
          $text = preg_replace('@(https?://([-\w\.]+)+(/([\w/_\.]*(\?\S+)?(#\S+)?)?)?)@', '<a target="_blank" href="$1" rel="nofollow">$1</a>', $text);
 
          //busca usuarios de twitter
          $text = preg_replace('/\s@(\w+)/', ' <a target="_blank" href="http://twitter.com/$1" rel="nofollow">@$1</a>', $text);
 
          //busca hashtags
          $text = preg_replace('/\s#(\w+)/', ' <a target="_blank" href="http://search.twitter.com/search?q=%23$1" rel="nofollow">#$1</a>', $text);
 
          //busca direcciones de correo electrónico
          $text = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $text); 
 
          //devuelve el texto
          return trim($text);
    }

Sólo nos queda llamar a la función para que no devuelva el texto con links. Ejemplo:

     <?php echo linkit("Me gusta la página de mononelo http://mononelo.es"); ?>

Y devolverá:

Me gusta la página de mononelo http://mononelo.es

Código optimizado y mejorado por Victor Mundet (twitter: @VictorMundet)