2009-07-21 14 views
2

img srcをPHPでスクラップしようとしていますが、srcに完全パスが含まれていないと、本当に再利用できません。 PHPを使用してイメージの完全なパスを取得する方法はありますか(ブラウザは、右クリックメニューを使用すると入手できます)。スクラップフルイメージsrc with PHP

ie。次の2つの例のいずれかでドメインを含む完全なパスを取得するにはどうすればよいですか?あなたはサイトのURLを持っていない限り

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

おかげで、

アラン

答えて

3

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

  1. それは、/ srcがそうで/
  2. で始まるまで、それは..で開始された場合はsplitに完全なURLとhack off piecesがあるでしょう(それはで始まるhttp://domain.com
  3. を付加で始まる場合letter)を入力し、フルドメインを取得し、strip it down to the last slashにsrc URLを追加します。

それとも....怠惰にしてうん、誰かがに物事をチャックこのスクリプトにbiffedされるフォーム、にURLを入力するhttp://www.web-max.ca/PHP/misc_24.php

+0

Perfect Thanks! – Allansideas

+0

あなたはBASEタグでこのケースを考慮していません:http://www.w3.org/TR/html401/struct/links.html#h-12.4 – Viet

+0

@Viet:良い点。しかしそれほど難しいことではない。 – mpen

2

はあなたが始めている(あなたはsrc属性の値にそれを前に付加することができ、その場合には)それはすべてのあなたのように思えます文字列が残っています。

もちろん、追加の情報にアクセスすることはできません。 HTMLを解析している場合は、少なくともHTMLページの絶対URLにアクセスできる必要があると思われますが、そうでない可能性があります。

+0

からこのスクリプト

$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; } 

を盗みます別のページから呼び出されるDBなので、私はドメインの前に置くことができましたが、より洗練されたソリューションがあるかどうか疑問に思っていました。正規表現は私の好きなパスタイムではありません。 – Allansideas