2016-04-06 28 views
-1

これはPHPのWebクローラー向けです。基本的には、ベースURLと相対リンクを指定すると、結果のリンクの実際の/絶対URLを返す必要があります。PHP - 絶対URLへの相対リンクを変換する

例: ベースURL:http://www.somewebsite.com/files/page.html リンク:../index.php

結果:http://somewebsite.com/index.php

がこれを行うライブラリー、または手動でそれをコーディングする方法はありますか?

+0

、役立ちます。 – ficuscr

+0

[PHP:相対URLを解決する方法](http://stackoverflow.com/questions/1243418/php-how-to-resolve-a-relative-url)の可能な複製 – fusion3k

答えて

2

この関数は、正規表現なし$pgurlにおける相対URLのから与え現在のページのURLを解決します。それが正常に解決されます。

/home.php?example種類、

同じ-dirのnextpage.php種類、

../...../.../parentdir種類、

フルhttp://example.netのURL、

と速記//example.netのURL

//Current base URL (you can dynamically retrieve from $_SERVER) 
$pgurl = 'http://example.com/scripts/php/absurl.php'; 

function absurl($url) { 
global $pgurl; 
if(strpos($url,'://')) return $url; //already absolute 
if(substr($url,0,2)=='//') return 'http:'.$url; //shorthand scheme 
if($url[0]=='/') return parse_url($pgurl,PHP_URL_SCHEME).'://'.parse_url($pgurl,PHP_URL_HOST).$url; //just add domain 
if(strpos($pgurl,'/',9)===false) $pgurl .= '/'; //add slash to domain if needed 
return substr($pgurl,0,strrpos($pgurl,'/')+1).$url; //for relative links, gets current directory and appends new filename 
} 

function nodots($path) { //Resolve dot dot slashes, no regex! 
$arr1 = explode('/',$path); 
$arr2 = array(); 
foreach($arr1 as $seg) { 
    switch($seg) { 
    case '.': 
    break; 
    case '..': 
    array_pop($arr2); 
    break; 
    case '...': 
    array_pop($arr2); array_pop($arr2); 
    break; 
    case '....': 
    array_pop($arr2); array_pop($arr2); array_pop($arr2); 
    break; 
    case '.....': 
    array_pop($arr2); array_pop($arr2); array_pop($arr2); array_pop($arr2); 
    break; 
    default: 
    $arr2[] = $seg; 
    } 
} 
return implode('/',$arr2); 
} 

使用例:

echo nodots(absurl('../index.html')); 

nodots()はURLが絶対的に変換され後に呼び出されなければなりません。

ドット機能は冗長ですが、読みやすく、高速で、正規表現を使用せず、典型的なURLの99%を解決します(100%確実にするには、スイッチブロックを6 +ドット、私は決してURLの中に多くのドットを見たことがない)。

希望これは、我々はリダイレクトではなく、書き換えの話をされていない限り、私はうまく...あなたは、このクライアント側を決定することができる方法を見ていない

関連する問題