我正在尝试为我的网站创建站点地图,所以基本上我会扫描主页中的链接并提取链接并递归地对提取的链接执行相同的操作
function get_contents($url = '' ) {
if($url == '' ) { $url = $this->base_url; }
$curl = new cURL;
$content = $curl->get($url);
$this->get_links($content);
}
public function get_links($contents){
$DOM = new DOMDocument();
$DOM->loadHTML($contents);
$a = $DOM->getElementsByTagName('a');
foreach($a as $link){
$h = $link->getAttribute('href');
$l = $this->base.'/'.$h;
$this->links[] = $l ;
$this->get_contents($l);
}
}
它工作正常,但有几个问题
1-
我得到了一些链接 ike
www.mysite.com/http://www.external.com
我可以做类似的事情
if( stripos( $link , 'http') !== false
||
stripos( $link , 'www.') !== false
||
stripos( $link , 'https') !== false
)
{
if(stripos( $link , 'mysite.com') !== false)
{
//ignor this link (yeah i suck at regex and string mapping)
}
}
但它似乎非常复杂和缓慢,是否有任何标准和干净的方法来找出链接是否是外部链接?
2 -
有没有办法处理相对路径?我得到了一些类似的东西
www.mysite.com/../Domain/List3.html
显然这是不对的,我可以从链接中删除(../),但它可能不适用于所有链接,无论如何要找出链接的完整地址?