PHP:如何获取href属性的绝对链接


PHP: How to get absolute link of href attribute

我正在尝试获取网站的favicon图像路径,我正在做一些类似的事情:

$favicon_img_url = $link->getAttribute('href');
echo $favicon_img_url;

但它只返回相对url(/faviicon.ico),而不是绝对链接(http://www.anysite.com/favicon.ico)我想要的。

编辑:为了更清晰,这里有一大块代码:

function file_get_contents_curl($url)
{
    //Some code here to get contents from a website....
}
$html = file_get_contents_curl($target_website);
$doc = new DOMDocument();
@$doc->loadHTML($html);
// GET FAVICON PATH
$links = $doc->getElementsByTagName('link');
for ($i = 0; $i < $links->length; $i++)
{
$link = $links->item($i);
$rel = $link->getAttribute('rel');
if($rel == 'shortcut icon')
    $favicon = $link->getAttribute('href');
}
echo $favicon; 

它只返回"/faviicon.ico"而不是"http://www.website.com/favicon.ico"

尝试添加到相对路径,域url$_SERVER['SERVER_NAME']

编辑:它给你的域名没有http或https。要添加它,您可以检查它是https还是http:if(isset($_SERVER['HTTPS'])){..}else{...}

href属性被定义为(绝对/相对)路径,并保持这种状态。当浏览器处理HTML标记时,它将使用该属性做两件事之一:

  • 如果它认为属性是一个有效的绝对路径,那么它将成为元素href属性
  • 如果它认为属性是一个相对路径,它会将其弹出到基本URL的末尾,并将其用作href属性

以这个页面标题为例,如果您检查标记,则属性为

/questions/26441184/php-how-to-get-absolute-link-of-href-attribute

这不是一个绝对的路径,但因为浏览器知道基本URL是http://stackoverflow.com,单击它将转到属性值,即:

http://stackoverflow.com/questions/26441184/php-how-to-get-absolute-link-of-href-attribute

tl;dr:如果不知道<a>所在页面的基本URL,就不能这样做。