2

phpでimgsrcをスクレイプしようとしていますが、srcを正常に取得できますが、srcにフルパスが含まれていない場合、実際に再利用することはできません。PHPを使用して画像のフルパスを取得する方法はありますか(ブラウザは右クリックメニューを使用すると取得できます)。

すなわち。次の2つの例のいずれかで、ドメインを含むフルパスを取得するにはどうすればよいですか?

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

ありがとう、

アラン

4

2 に答える 2

3

正規表現は必要ありません...ちょっと待ってください。私は本当にあなたのためにコードを書きたいわけではありませんが、src が で始まっているかどうかを確認してくださいhttp://。そうでない場合は、3 つの異なるケースがあります。

  1. で始まる場合は/、先頭に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 に答える