これはPHPのWebクローラー向けです。基本的には、ベースURLと相対リンクを指定すると、結果のリンクの実際の/絶対URLを返す必要があります。PHP - 絶対URLへの相対リンクを変換する
例: ベースURL:http://www.somewebsite.com/files/page.html リンク:../index.php
結果:http://somewebsite.com/index.php
がこれを行うライブラリー、または手動でそれをコーディングする方法はありますか?
これはPHPのWebクローラー向けです。基本的には、ベースURLと相対リンクを指定すると、結果のリンクの実際の/絶対URLを返す必要があります。PHP - 絶対URLへの相対リンクを変換する
例: ベースURL:http://www.somewebsite.com/files/page.html リンク:../index.php
結果:http://somewebsite.com/index.php
がこれを行うライブラリー、または手動でそれをコーディングする方法はありますか?
この関数は、正規表現なし$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の中に多くのドットを見たことがない)。
希望これは、我々はリダイレクトではなく、書き換えの話をされていない限り、私はうまく...あなたは、このクライアント側を決定することができる方法を見ていない
.htaccessと正規表現ではこのトリックを行うことができます。同様の議論が発見された:Redirect URL to custom URL through .htaccess
、役立ちます。 – ficuscr
[PHP:相対URLを解決する方法](http://stackoverflow.com/questions/1243418/php-how-to-resolve-a-relative-url)の可能な複製 – fusion3k