Extraer urls de un string y darle formato html

Iniciado por Littl3, 17 Junio 2009, 02:27 AM

0 Miembros y 1 Visitante están viendo este tema.

Littl3

Hola buenas,

Estoy tratando de hacer un script que haga lo siguiente:

Código (php) [Seleccionar]
$string='el foro de www.foro.elhacker.net es un foro muy bueno y su pagina web es
www.elhacker.net y con http es http://elhacker.net o http://www.elhacker.net';

$stringformateada = formatearurls($string);

echo $stringformateada;


Y esto tendria que devolver:

Citar
el foro de www.foro.elhacker.net es un foro muy bueno y su pagina web es
www.elhacker.net y con http es http://elhacker.net o http://www.elhacker.net

Como veis hay varios formatos de url... por eso necesito un script bastante completo y de momento he sido incapaz de hacerlo....

EDITO: ya tengo el script y funciona a la perfeccion lo pongo por si alguien lo busca algun dia xD...


Código (php) [Seleccionar]
<?php

/**
* Rewritten by Nathan Codding - Feb 6, 2001.
* - Goes through the given string, and replaces xxxx://yyyy with an HTML <a> tag linking
* to that URL
* - Goes through the given string, and replaces www.xxxx.yyyy[zzzz] with an HTML <a> tag linking
* to http://www.xxxx.yyyy[/zzzz]
* - Goes through the given string, and replaces xxxx@yyyy with an HTML mailto: tag linking
* to that email address
* - Only matches these 2 patterns either after a space, or at the beginning of a line
*
* Notes: the email one might get annoying - it's easy to make it more restrictive, though.. maybe
* have it require something like xxxx@yyyy.zzzz or such. We'll see.
*/
function make_clickable($text)
{

// pad it with a space so we can match things at the start of the 1st line.
$ret ' ' $text;

// matches an "xxxx://yyyy" URL at the start of a line, or after a space.
// xxxx can only be alpha characters.
// yyyy is anything up to the first space, newline, comma, double quote or <
$ret 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>'$ret);

// matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing
// Must contain at least 2 dots. xxxx contains either alphanum, or "-"
// zzzz is optional.. will contain everything up to the first space, newline,
// comma, double quote or <.
$ret 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>'$ret);

// matches an email@domain type address at the start of a line, or after a space.
// Note: Only the followed chars are valid; alphanums, "-", "_" and or ".".
$ret preg_replace("#([\n ])([a-z0-9\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i""\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>"$ret);

// Remove our padding..
$ret substr($ret1);

return(
$ret);
}

$text='el foro de www.foro.elhacker.net es un foro muy bueno y su pagina web es
www.elhacker.net y con http es http://elhacker.net o http://www.elhacker.net'
;

echo 
make_clickable($text);




?>


Saludos