Contacto | #php_para_torpes | Enlázanos | ¿Quiénes somos?
38 usuarios Online (0)
Darse de alta en la web | Recuperar password   
Inicio / Foros / PHP / Ayuda con Expresión regular en PHP
3 respuestas recibidas | 124 visitas | Categoría PHP

Ayuda con Expresión regular en PHP

Avatar de LordMac
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 14 posts)

#0 Offline LordMac Usuario 23 feb 08 (23:52)  
Hola
Mi problema es que tengo una funcion me devuelve una lista con todas las url de una pagina (HTML) ,pero me devuelve al imprimir

http://mipagina.com/
https://seguridadmipagina.com/
/?q=docencia
/?q=tecnologia
http://investigaciones.com/news.php
/?q=areas
?q=node/1714
?q=node/1715
?q=node/1716
?q=node/1718
?q=node/1717
?q=masnot

lo que necesito es si alguien puede ayudarme a confeccionar una expresion regular para devolverla tal y como son , porque asi no me sirven "?q=node/1716" ,sino deberia ser "http://mipagina.com/?q=node/1716" , esto es lo que tengo hecho pero no me sirve

$url1="http://mipagina.com";
$car=devolver_listados_X_url($url1);
$patron="/^(/?q=)*/";

for ($i=0;$i<count($car);$i++)
{
if(preg_match($patron,$car[$i]))
$var[$i]="".$car[0].$car[$i];
echo $car[$i]."<BR>\n";
}

esto no me resuelve el problema ya que lo que quiero que me haga es que a todas las direcciones que comiencen con esos caracteres ?q= me le ponga delante la primera url $car[0],que concatenada con ella deberia quedar "http://mipagina.com/?q=node/1716". No se si me hago entender,pero de todas formas gracias de antemano.

Re: Ayuda con Expresión regular en PHP

Avatar de Onzalo
Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2

(Nivel 2 - 69 posts)

#1 Offline Onzalo Usuario 24 feb 08 (15:26) Valor Valor Valor  
A ver si te sirve esto...
primero te explico algo..
hay dos tipos de URLs:
Las URLs absolutas que tienen este formato:
protocolo://rutadelarchivo
ej: http://www.php-hispano.net/foros/PHP/28334

Y las URLs relativas que se valen de la ubicacion actual.
por ej. estoy en http://www.php-hispano.net/foros/PHP/28334.

<a href="28335">Esto</a> llevaría a ej: http://www.php-hispano.net/foros/PHP/28335.
ésta última sería la url absoluta.

otro ej. si sigue estando en http://www.php-hispano.net/foros/PHP/28334
<a href="../css">Esto</a> llevaría a http://www.php-hispano.net/foros/css

o por último, con una query string
<a href="?algo=0">Esto</a> llevaría a http://www.php-hispano.net/foros/PHP/28334?algo=0
todas estas son urls relativas.


Entonces si quisieras listar "todas" las urls de una página debería convertir las urls relativas en absolutas.

Código PHP


<?
#$url es la página que estamos buscando para extraer urls
#$car es la url extraida
//indentificamos cuales son absolutas
//si $car comienza con http://  ó https// ó ftp://
//podés agregar los protocolos que quieras.. o si lo necesitás.. simplemente poné un comodía.. y que termine con ://

if(eregi('^(http://|https://|ftp://)',$car)){
    
//devolvemos $car porque es absoluta
    
echo $car;
}else{
    
//sino las convertimos
    //estas urls son relativas a la página q estamos analizando, entonces..
    
echo $url;/*si $car no comienza con "/"  la ponemos*/if(!ereg('^(/)',$car)){echo '/';} echo $car;
}
?>



La segunda comprobacion es para evitar algo como esto:
si $car fuera "/28335"
devolvería http://www.php-hispano.net/foros/PHP//28335.
sin esta comprobación igual funciona.. pero, por lo menos a mi no me gusta xD..

Bueno.. espero no haberte molestado por la explicaiónd e las urls.. si ya lo sabías.. tal vez a otro le sirva.. ;)
Si alguien puede mejorar el script le agradezco.. q a mi tambien me sirve :P

Espero que te sirva.. sino avisá..
Onzalo..

Re: Ayuda con Expresión regular en PHP

Avatar de LordMac
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 14 posts)

#2 Offline LordMac Usuario 25 feb 08 (02:25)  
Un millón de gracias Onzalo, su código funcionó super bien,y me resolvió el problema que tenia , es que estoy tratando de hacer un spider en php y estaba detenido por esto.
Gracias nuevamente y Saludos

Re: Ayuda con Expresión regular en PHP

Avatar de LordMac
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 14 posts)

#3 Offline LordMac Usuario 10 mar 08 (06:03)  
Hola nuevamente
He seguido trabajando en lo que les comente anteriormente pero me ha surgido otra duda , el codigo que me facilito Onzalo funciono perfectamente

Código PHP

<?
#$url es la página que estamos buscando para extraer urls
#$car es la url extraida
//indentificamos cuales son absolutas
//si $car comienza con http:// ó https// ó ftp://
//podés agregar los protocolos que quieras.. o si lo necesitás.. simplemente poné un comodía.. y que termine con ://

if(eregi('^(http://|https://|ftp://)',$car)){
//devolvemos $car porque es absoluta
echo $car;
}else{
//sino las convertimos
//estas urls son relativas a la página q estamos analizando, entonces..
echo $url;/*si $car no comienza con "/" la ponemos*/if(!ereg('^(/)',$car)){echo '/';} echo $car;
}
?>

ahora el problema es el siguiente,cuando llamo recursivamente con el primer elemento de la lista para obtener un nuevo listado de url e insertarlo al final de la lista , me esta creando una redundancia de url , ejemplo ,
si el sitio esta utilizando un cms(joonla por ejemplo) , me escribe en varias ocaciones

http://mipagina.com/index.php/#
http://mipagina.com/index.php/#
http://mipagina.com/index.php/#
http://mipagina.com/index.php/#
etc....
pero ademas de eso cuando convierto la url de relativa en absoluta y le toca a ella para formar el listado me hace referencia a ella misma y a otras que ya estan en la lista, por ejemplo

http://mipagina.com/?q=produccion //--Ya esta pagina la tengo en la lista (la tengo indexada)
http://mipagina.com/?q=node/1834/?q=produccion //Esta es la misma que la anterior
http://mipagina.com/?q=tecnologia
http://mipagina.com/?q=node/1834/?q=tecnologia
http://mipagina.com/?q=node/1835/?q=tecnologia
http://mipagina.com/?q=node/1836/?q=tecnologia
http://mipagina.com/?q=node/1834/?q=produccion/?=tecnologia

Esto es muy molesto ya que el proceso de indexacion de una pagina es un proceso muy costoso (recursos) y si ademas eso tengo que hacerlo con la misma pagina varias veces....
Si alguien tiene una idea de como resolver el problema se lo agradeceria , si no me hago entender bien me escriben.
Saludos y gracias de antemano.

Responder mensaje

Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano, :: Registrar ::
Login / Password   

Web alojada en Zilos

php-hispano.net 2002 - 2008 | XHTML 1.0
Datos Legales | Webmaster