Expresiones regulares y demas...

Sandevil

En fin.. llevo ya cinco dias atascado intentando hacer una funcion que pasandole un texto (como este por ejemplo ) que contenga una url (ya sea http:// o sin el http) cree un link automaticamente..
Os pongo lo que llevo y las distintas vias...
Aunque la expresion regular es correcta, no devuelve ningun resultado: por otro lado esta el hecho de que aunque esta expresion reconoce web con http o sin http, no lo hace correctamente con webs que tengan un - o / ...

Si alguno tiene ideas...

//Convierte urls a enlaces
function enlace($text){
//Establecemos las distintas expresiones regulares
$opt1 ="(http|https|ftp)://[a-zA-Z0-9-.]+.[a-zA-Z]{2,3}(:[a-zA-Z0-9])?/?([a-zA-Z0-9-.\?\,\'/\+&%\$#\=]$
$opt2 = "[a-zA-Z0-9-.]+.[a-zA-Z]{2,3}(:[a-zA-Z0-9]
)?/?([a-zA-Z0-9-.\?\,\'/\+&%\$#\=])*[.\,)(\s]";
//Y lo cambios
$camb1 = "<a href=\0 target=blank>\0</a>";
$camb2 = "<a href=http://\0 target=
blank>http://\0</a>";
//la funcion en si
if ($comprobacion = eregi_replace ($opt1, $camb1, $text)) {
return $text;
} elseif ($comprobacion = eregi_replace ($opt2, $camb2, $text)) {
return $text;
} else {
return $text;
}
}

r2d2rigo

¿Qué tal rawurlencode()? Elimina espacios y caracteres extraños para adecuarlos al navegador.

Sandevil

Eno con una pequeña modificiacion consigo que me funcione con solo una linea y cree los enlaces para paginas con http y sin el...:

$cambiado = eregi_replace ($expreg, $cambios, $texto);
return $cambiado;

Sin embargo, si uso una pagina sin http:// me crea mal el enlace, sin el http://, con lo cual si se pincha, intenta buscarlo dentro del propio servidor y si uso un enlace con - como www.media-vida.net, me la convierte en dos enlaces www.media- y vida.net.

He mirado el rawlencode, y por lo que he leido convierte caracteres que no sean alfanumericos en hexadecimal.. como espacios y demas.. con la excepcion de - y _...
Asi que tampoco me valdria. Aunque conocer para que vale esa funcion puede que tenga su uso en un futuro :P.

Mushas asies por el tiempo prestado ;D

Sandevil

Asies mv... ^^
Creo que al poner el post anterior en respuesta, me he auto-respondido y ya se como lo haceis xDD perretes...

Cuando haga la funcion y este comprobada la posteare por aqui.

Abreu

Yo uso esta....

$texto = preg_replace("/[URL](http:\/\/)?([a-zA-Z0-9-_.&;:\/=\?()]+)[\/URL]/si","<a href=\"http://\2\" target=\"_blank\">\2</a>",$texto);

Esta cambiaria EN TODO EL TEXTO lo tipico de Direccion, la modificamos un poco...

$texto = preg_replace("/(http:\/\/|www)([a-zA-Z0-9-_.&;:\/=\?()]+)/si","<a href=\"http://\2\" target=\"_blank\">\1\2</a>",$texto);

Solo he quitado los tags "URL" y le he obligado a que busque "http://" o "www" para cambiar las direcciones por enlaces. Pruebala y dime si te va bien.

Usuarios habituales

  • Abreu
  • Sandevil
  • r2d2rigo