编程语言
首页 > 编程语言> > 使用PHP刮掉完整的图像src

使用PHP刮掉完整的图像src

作者:互联网

我试图用php抓取img src,我可以很好地得到src,但是如果src不包含完整路径那么我就无法重用它.有没有办法使用PHP获取图像的完整路径(如果您使用右键菜单,浏览器可以获取它).

即.如何在以下两个示例之一中获取包含域的完整路径?

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

谢谢,

艾伦

解决方法:

你不需要正则表达式……只需要一些耐心.我真的不想为你编写代码,只是检查src是否以http://开头,如果没有,你有3种不同的情况.

>如果它以/开头,那么前面加上http://domain.com
>如果它以……开头,那么你需要split完整的URL和hack off pieces,直到src以/开头
> Else(以字母开头),取完整域,strip it down to the last slash然后附加src URL.

或者……偷懒并偷走这个剧本

$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

标签:src,php,path,screen-scraping
来源: https://codeday.me/bug/20191005/1856111.html