2

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

IE。如何在以下两个示例之一中获得包含域的完整路径?

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

谢谢,

艾伦

4

2 回答 2

3

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

  1. 如果它以 a 开头,/则在前面添加http://domain.com
  2. 如果它以开头,..则必须拆分完整的 URL 并破解部分,直到 src 以/
  3. 否则(它以字母开头),获取完整的域,并将其剥离到最后一个斜杠,然后附加 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

于 2009-07-22T01:54:30.787 回答
2

除非您有开始使用的站点 URL(在这种情况下,您可以将其添加到 src 属性的值之前),否则您似乎只剩下一个字符串。

我假设您当然无权访问任何其他信息。如果您正在解析 HTML,我假设您必须能够访问至少 HTML 页面的绝对 URL,但也许不能。

于 2009-07-21T23:03:18.200 回答