使用简单HTML DOM将相对URL转换为绝对URL?

Jea*_*ean 3 php screen-scraping

当我从某些页面抓取内容时,该脚本会提供相对URL.是否可以使用Simple HTML DOM获取绝对URL?

Gum*_*mbo 12

我不认为Simple HTML DOM Parser可以做到这一点.

但你可以自己做.首先,如果没有另外声明,则需要区分作为文档URI的基URI(请参阅BASE元素).然后获取每个URI引用并应用算法来解析RFC 3986中描述的相对URI(已经存在可以用于PEAR包Net_URL2的类).

所以,使用这两个类,你可以这样做:

$uri = new Net_URL2('http://example.com/foo/bar'); // URI of the resource
$baseURI = $uri;
foreach ($html->find('base[href]') as $elem) {
    $baseURI = $uri->resolve($elem->href);
}

foreach ($html->find('*[src]') as $elem) {
    $elem->src = $baseURI->resolve($elem->src)->__toString();
}
foreach ($html->find('*[href]') as $elem) {
    if (strtoupper($elem->tag) === 'BASE') continue;
    $elem->href = $baseURI->resolve($elem->href)->__toString();
}
foreach ($html->find('form[action]') as $elem) {
    $elem->action = $baseURI->resolve($elem->action)->__toString();
}
Run Code Online (Sandbox Code Playgroud)

重复该替代含有一个URI像任何其他属性background,cite,classid,codebase,data,longdesc,profileusemap(参见在HTML 4.01属性的索引).