我正在尝试为我的网站创建一个站点地图 所以基本上我扫描主页的链接 并提取链接并递归地为提取的链接做同样的事情
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
显然,这是不对的
我可以从链接中删除(../)但它可能不适用于所有链接
无论如何要找到链接的完整地址?
答案 0 :(得分:2)
对于相对路径,您可以查看realpath()
使用parse_url()
获取域名,以便您轻松查看
如果域名等于您的域名。请注意,parse_url()
需要定义SCHEME
所以如果没有http [s],可以添加http://。