Pregunta

Estoy tratando de raspar img src de con php, puedo conseguir la multa src, pero si el src no incluye la ruta completa a continuación, no puedo volver a utilizarlo. ¿Hay una manera de captar la ruta completa de la imagen usando PHP (navegadores pueden conseguirlo si utiliza el menú del botón derecho).

ie. ¿Cómo consigo una ruta completa que incluye el dominio de uno de los dos ejemplos siguientes?

src="../foo/logo.png"
src="/images/logo.png"

Gracias,

Allan

¿Fue útil?

Solución

No es necesario una expresión regular ... sólo un poco de paciencia. Yo realmente no quiero escribir el código para usted, pero sólo comprobar si el src comienza con http://, y si no, usted tiene como 3 casos diferentes.

  1. Si se comienza con una / continuación, anteponer http://domain.com
  2. Si se comienza con .. tendrá que dividida la URL completa y hackear pedazos hasta que el src comienza con un /
  3. lo demás (que comienza con una letra), el tomar el dominio completo, y despojarlo hasta la última barra continuación, añadir la URL src.

O .... ser perezoso y robar este script

$url = "http://www.goat.com/money/dave.html";
$rel = "../images/cheese.jpg";

$com = InternetCombineURL($url,$rel);

//  Returns http://www.goat.com/images/cheese.jpg

function InternetCombineUrl($absolute, $relative) {
    $p = parse_url($relative);
    if($p["scheme"])return $relative;

    extract(parse_url($absolute));

    $path = dirname($path); 

    if($relative{0} == '/') {
        $cparts = array_filter(explode("/", $relative));
    }
    else {
        $aparts = array_filter(explode("/", $path));
        $rparts = array_filter(explode("/", $relative));
        $cparts = array_merge($aparts, $rparts);
        foreach($cparts as $i => $part) {
            if($part == '.') {
                $cparts[$i] = null;
            }
            if($part == '..') {
                $cparts[$i - 1] = null;
                $cparts[$i] = null;
            }
        }
        $cparts = array_filter($cparts);
    }
    $path = implode("/", $cparts);
    $url = "";
    if($scheme) {
        $url = "$scheme://";
    }
    if($user) {
        $url .= "$user";
        if($pass) {
            $url .= ":$pass";
        }
        $url .= "@";
    }
    if($host) {
        $url .= "$host/";
    }
    $url .= $path;
    return $url;
}

http://www.web-max.ca/PHP/misc_24. php

Otros consejos

A menos que tenga la URL del sitio que esté comenzando con (en cuyo caso puede anteponer al valor del atributo src) parece que todo lo que te queda no es una cadena.

Estoy asumiendo que no tiene acceso a cualquier información adicional, por supuesto. Si estás análisis de HTML, yo supongo que debe ser capaz de acceder a una URL absoluta, al menos, la página HTML, pero tal vez no.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top