如何在PHP中获取<img rel="nofollow noreferrer" />的绝对URL?

use*_*729 -2 html php

src<img>是已知的,以及目标网页的网址,例如http://test.com/directory/hi.html,如何实现一般功能来获取图像的绝对URL?

zom*_*bat 6

我会:

  1. 检查img URL是否以主机值开头,如果是,则返回它,因为它已经是绝对的
    • 解析网页URL以获取基本主机值
    • 检查img src是否相对于根目录或目录,并根据需要附加到基本主机值.

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
Run Code Online (Sandbox Code Playgroud)