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 noopener noreferrer">$1</a>', $text); //busca usuarios de twitter $text = preg_replace('/s@(w+)/', ' <a target="_blank" href="http://twitter.com/$1" rel="nofollow noopener noreferrer">@$1</a>', $text); //busca hashtags $text = preg_replace('/s#(w+)/', ' <a target="_blank" href="http://search.twitter.com/search?q=%23$1" rel="nofollow noopener noreferrer">#$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)