1. 程式人生 > >PHP將相對路徑URL轉換為絕對路徑URL

PHP將相對路徑URL轉換為絕對路徑URL

在採集程式或者蜘蛛程式中經常會遇到一類問題,就是將網頁中相對路徑形式的URL轉換為絕對路徑形式的URL。例如在http://www.msphome.cn/blog/1/這個頁面中,有一個URL連結為../index.php,那麼我們要將它轉換為http://www.msphome.cn/blog/index.php。下面給出瞭解決這類問題的程式碼。該程式能夠成功處理各種URL,將其變成絕對形式。

<?php
$a = 'http://www.abc.com/a/index.html';
$b = '../abc/a.js';
echo format_url($b, $a);

function format_url($srcurl, $baseurl) {
  $srcinfo = parse_url($srcurl);
  if(isset($srcinfo['scheme'])) {
    return $srcurl;
  }
  $baseinfo = parse_url($baseurl);
  $url = $baseinfo['scheme'].'://'.$baseinfo['host'];
  if(substr($srcinfo['path'], 0, 1) == '/') {
    $path = $srcinfo['path'];
  }else{
    $path = dirname($baseinfo['path']).'/'.$srcinfo['path'];
  }
  $rst = array();
  $path_array = explode('/', $path);
  if(!$path_array[0]) {
    $rst[] = '';
  }
  foreach ($path_array AS $key => $dir) {
    if ($dir == '..') {
      if (end($rst) == '..') {
        $rst[] = '..';
      }elseif(!array_pop($rst)) {
        $rst[] = '..';
      }
    }elseif($dir && $dir != '.') {
      $rst[] = $dir;
    }
   }
  if(!end($path_array)) {
    $rst[] = '';
  }
  $url .= implode('/', $rst);
  return str_replace('\\', '/', $url);
}
?>