已知src
的{{1}},以及目标网页的网址,如<img>
,如何实现检索图像绝对网址的常规功能?
答案 0 :(得分:6)
我会:
parse_url()将成为这里的选择功能。我感到很勇敢,所以我为你实现了它:
function getAbsoluteImageUrl($pageUrl,$imgSrc)
{
$imgInfo = parse_url($imgSrc);
if (! empty($imgInfo['host'])) {
//img src is already an absolute URL
return $imgSrc;
}
else {
$urlInfo = parse_url($pageUrl);
$base = $urlInfo['scheme'].'//'.$urlInfo['host'];
if (substr($imgSrc,0,1) == '/') {
//img src is relative from the root URL
return $base . $imgSrc;
}
else {
//img src is relative from the current directory
return
$base
. substr($urlInfo['path'],0,strrpos($urlInfo['path'],'/'))
. '/' . $imgSrc;
}
}
}
//tests
$host = 'http://test.com/directory/hi.html';
$imgSrc = '/images/lolcat.jpg';
echo getAbsoluteImageUrl($host,$imgSrc);
//echos http//test.com/images/lolcat.jpg
$host = 'http://test.com/directory/hi.html';
$imgSrc = 'images/lolcat.jpg';
echo getAbsoluteImageUrl($host,$imgSrc);
//echos http//test.com/directory/images/lolcat.jpg
$host = 'http://test.com/directory/hi.html';
$imgSrc = 'http://images.com/lolcat.jpg';
echo getAbsoluteImageUrl($host,$imgSrc);
//echos http://images.com/lolcat.jpg
答案 1 :(得分:0)
使用parse_url,您可以执行以下操作:
"$scheme://$domain$img_url"
"$scheme://$domain/$path/$img_url"
这样的img url。如果img_url是“.././"-style,这也有效,因为这些将由服务器解析。您可能还想要排除以方案或域名开头的img网址('xx://'或'xx.xx /')。
答案 2 :(得分:0)
接受的答案没有考虑以//开头的src。这使得该方案根据原点而开放。我认为他们的答案中也缺少一个冒号。这是我的略微修改版本似乎工作正常。请注意,它使用PHP7语法。
function getAbsoluteImageUrl($pageUrl,$imgSrc)
{
$imgInfo = parse_url($imgSrc);
var_dump(parse_url($imgSrc));
if (!empty($imgInfo['host'])) {
//img src is already an absolute URL
if (substr($imgSrc,0,2) == '//') {
return (parse_url($pageUrl)['scheme'] ?? "http") . ":" . $imgSrc;
} else {
return $imgSrc;
}
}
else {
$urlInfo = parse_url($pageUrl);
$base = $urlInfo['scheme'].'://'.$urlInfo['host'];
if (substr($imgSrc,0,1) == '/') {
//img src is relative from the root URL
return $base . $imgSrc;
}
else {
//img src is relative from the current directory
return
$base
. substr($urlInfo['path'],0,strrpos($urlInfo['path'],'/'))
. '/' . $imgSrc;
}
}
}
答案 3 :(得分:-1)
如果我理解了这个问题,您可以在应用程序根目录中定义APPLICATION_PATH,如下所示,然后使用它:
define('APPLICATION_PATH', realpath(dirname(__FILE__)));
...
<img src="<?php APPLICATION_PATH ?>/path/to/image.png" alt="" />
...