使用链接:识别外部链接和链接的完整地址

时间:2012-11-29 15:38:26

标签: php

我正在尝试为我的网站创建一个站点地图 所以基本上我扫描主页的链接 并提取链接并递归地为提取的链接做同样的事情

  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
显然,这是不对的 我可以从链接中删除(../)但它可能不适用于所有链接 无论如何要找到链接的完整地址?

1 个答案:

答案 0 :(得分:2)

对于相对路径,您可以查看realpath()

使用parse_url()获取域名,以便您轻松查看 如果域名等于您的域名。请注意,parse_url()需要定义SCHEME 所以如果没有http [s],可以添加http://。