phpでimgsrcをスクレイプしようとしていますが、srcを正常に取得できますが、srcにフルパスが含まれていない場合、実際に再利用することはできません。PHPを使用して画像のフルパスを取得する方法はありますか(ブラウザは右クリックメニューを使用すると取得できます)。
すなわち。次の2つの例のいずれかで、ドメインを含むフルパスを取得するにはどうすればよいですか?
src="../foo/logo.png"
src="/images/logo.png"
ありがとう、
アラン
phpでimgsrcをスクレイプしようとしていますが、srcを正常に取得できますが、srcにフルパスが含まれていない場合、実際に再利用することはできません。PHPを使用して画像のフルパスを取得する方法はありますか(ブラウザは右クリックメニューを使用すると取得できます)。
すなわち。次の2つの例のいずれかで、ドメインを含むフルパスを取得するにはどうすればよいですか?
src="../foo/logo.png"
src="/images/logo.png"
ありがとう、
アラン
正規表現は必要ありません...ちょっと待ってください。私は本当にあなたのためにコードを書きたいわけではありませんが、src が で始まっているかどうかを確認してくださいhttp://
。そうでない場合は、3 つの異なるケースがあります。
/
、先頭にhttp://domain.comを追加します..
を分割し、src が/
または....怠惰になってこのスクリプトを盗む
$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;
}
開始するサイトのURLがない限り(この場合、src属性の値の前に追加できます)、残っているのは文字列だけのようです。
もちろん、追加情報にアクセスできないと思います。HTMLを解析している場合は、少なくともHTMLページへの絶対URLにアクセスできる必要があると思いますが、おそらくそうではありません。