Lo que pasa es que no puedo definir la dirección en una variable "$direccion" porque esta se encuentra en medio de un texto, un comentario que escribe alguien.
La función es capaz de encontrar cualquier dirección en cualquier texto y convertirla a enlace, lo que falta es que la acorte también. Por ello pensaba en integrar substr(); en la función tal que así:
Código PHP:
"stripslashes((strlen('\\2')>0?'\\1<a href=\"hxp://\\2\" rel=\"notfollow\">substr(\\2)</a>\\3':'\\0'))",
Pero obviamente está mal porque no funciona.
Por cierto, esta es la función pero debéis de cambiar el "hxp" y "wxw" por su forma correcta:
Código PHP:
function make_links_blank($comentario)
{
return preg_replace(
array(
'/(?(?=<a[^>]*>.+<\/a>)
(?:<a[^>]*>.+<\/a>)
|
([^="\']?)((?:hxps?|ftp|bf2|):\/\/[^<> \n\r]+)
)/iex',
'/<a([^>]*)target="?[^"\']+"?/i',
'/<a([^>]+)>/i',
'/(^|\s)(wxw.[^<> \n\r]+)/iex',
'/(([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-]+)
(\\.[A-Za-z0-9-]+)*)/iex'
),
array(
"stripslashes((strlen('\\2')>0?'\\1<a href=\"\\2\" rel=\"notfollow\">\\2</a>\\3':'\\0'))",
'<a\\1',
'<a\\1 target="_blank">',
"stripslashes((strlen('\\2')>0?'\\1<a href=\"htp://\\2\" rel=\"notfollow\">\\2</a>\\3':'\\0'))",
"stripslashes((strlen('\\2')>0?'<a href=\"mailto:\\0\">\\0</a>':'\\0'))"
),
$comentario
);
}
$comentario= make_links_blank($comentario);
Gracias por la respuesta