2012-11-29 74 views
0

我想为我的网站创建一个站点地图 所以基本上我扫描主页链接 并提取链接并对提取的链接递归执行相同的操作使用链接:识别外部链接和链接的完整地址

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 

一些事情obviusly这是不对的 我可以从链接中删除(../),但它可能无法与所有的链接 工作反正是有找到一个链接的完整地址?

+0

您使用的是哪种CMS或框架 - 如果有的话 - 可能有更好的方法? –

+0

@jakenoble无! – max

回答

2

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

使用parse_url()获得例如域,以便你可以很容易检查 如果域等于您的域名。请注意,parse_url()需要定义一个SCHEME ,所以如果没有http [s],可以添加http://。