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

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

4

1 回答 1

2

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

例如,用于parse_url()获取域,以便您可以轻松检查域是否等于您的域。请注意,parse_url()需要定义 SCHEME,因此如果没有 http[s],则可以添加 http://。

于 2012-11-29T15:47:36.707 回答