Foros del Web » Programando para Internet » PHP »

Convertir http a link

Estas en el tema de Convertir http a link en el foro de PHP en Foros del Web. Hola, estoy jugando con expresiones regulares, porque me interesaría que los http://www.etc.etc que ponen en un campo text de la base de datos, quedáran como ...
  #1 (permalink)  
Antiguo 21/03/2004, 13:49
 
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona - España
Mensajes: 270
Antigüedad: 21 años, 4 meses
Puntos: 0
Convertir http a link

Hola, estoy jugando con expresiones regulares, porque me interesaría que los http://www.etc.etc que ponen en un campo text de la base de datos, quedáran como un link
He buscado en las FAQ's y el ejemplo que he encontrado no me funciona.
Alguien puede decirme si lo ha utilizado y le funciona?
Gracias de antemano por vuestra respuesta y ayuda.
Ahí va el código que encontré en las faq's

<?php
$texto = str_replace("\r", "", $texto);

$texto = preg_replace("/(http://[^()|[:space:])]*))/",
"<a href=\"\1\" target=\"_blank\">\1</a> )",
$texto);

$texto = preg_replace("/(http://[^([:space:]|\"|< )]*)[[:space:]]/",
"<a href=\"\1\" target=\"_blank\">\1</a> ",
$texto);

$texto = preg_replace("/<a href=\"(.*zonasiete.*)\" target=\"_blank\">/",
"<a href=\"\1\">",
$texto);

?>

--------------------------------------------------------------------------------


En este caso, el dominio local es zonasiete.org. Espero que a alguien le sea útil. Por alguna extraña razón, no se muestra bien en mi post el code. Aclaraciones:

< ) -- ahí no hay un espacio, esos dos caracteres van seguidos.

\1 -- Todos los unos (1) van precedidos de doble barra invertida, aunque solo se muestra una.
  #2 (permalink)  
Antiguo 21/03/2004, 14:39
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 21 años
Puntos: 1
esta funcion la saque de un motor de templates, la verdad no sabria decir de cual, osea que los creditos de la funcion son para el creador de ese motor,

La verdad es que va muy bien, solo tiene un pequño defecto que tiene de haber al menos un espacio delante del url a buscar, siempre me propongo a arreglarlo pero nunca encuentro el momento,

Espero que te sirva

Código PHP:
 function busca_url($_valor=''){

        
$pattern[0] = "#([\n ])([a-z]*)://([^, \n\r]+)#i"
        
$replacement[0] = "\\1<a href=\"\\2://\\3\" target=\"_blank\">\\2://\\3</a>"
        
$pattern[1] = "#([\n ])www\.([a-z0-9\-]+)\.([a-z0-9\-.\~]+)((?:/[^, \n\r]*)?)#i"
        
$replacement[1] = "\\1<a href=\"http://www.\\2.\\3\\4\" target=\"_blank\">[url]www.\\2.\\3\\4[/url]</a>"
        
$pattern[2] = "#([\n ])([a-z0-9\-_.]+?)@([^, \n\r]+)#i"
        
$replacement[2] = "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>"
        
$_remplazado preg_replace($pattern,$replacement,$_valor);
        return 
$_remplazado;
        

saludos
  #3 (permalink)  
Antiguo 22/03/2004, 12:03
 
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona - España
Mensajes: 270
Antigüedad: 21 años, 4 meses
Puntos: 0
Hola Jordi, y muchas gracias, pero desafortunadamente me aparece un error en la linea de
$replacement[1] = "\1<a href=\"http://www.\2.\3\4\" target=\"_blank\"><a href="/out.php?http%3A%2F%2Fwww.%5C%5C2.%5C%5C3%5C%5C4" target="_blank">www.\2.\3\4</a></a>";
A ver si encuentro el fallo, la verdad es que no me llevo bien con las expresiones regulares.
Gracias
  #4 (permalink)  
Antiguo 22/03/2004, 12:13
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 21 años
Puntos: 1
Ahh, sabes que pasa, que el foro a contaminado la funcion, no es asi,

a ver si ahora pasa bien

function busca_url($_valor=''){

$pattern[0] = "#([\n ])([a-z]*)://([^, \n\r]+)#i";
$replacement[0] = "\\1<a href=\"\\2://\\3\" target=\"_blank\">\\2://\\3</a>";
$pattern[1] = "#([\n ])www\.([a-z0-9\-]+)\.([a-z0-9\-.\~]+)((?:/[^, \n\r]*)?)#i";
$replacement[1] = "\\1<a href=\"http://www.\\2.\\3\\4\" target=\"_blank\">www.\\2.\\3\\4</a>";
$pattern[2] = "#([\n ])([a-z0-9\-_.]+?)@([^, \n\r]+)#i";
$replacement[2] = "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>";
$_remplazado = preg_replace($pattern,$replacement,$_valor);
return $_remplazado;

}
  #5 (permalink)  
Antiguo 22/03/2004, 12:14
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 21 años
Puntos: 1
si hara me parece que ha pasado bien, no me habia dado cuentaa antes

saludps
  #6 (permalink)  
Antiguo 22/03/2004, 12:58
 
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona - España
Mensajes: 270
Antigüedad: 21 años, 4 meses
Puntos: 0
Muchisimas gracias, Jordi, esto funciona perfectamente.
Gracias de nuevo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:58.