2016-04-06 29 views
-1

Bu, PHP'de web tarayıcısı içindir. Temel olarak, bir temel URL ve göreceli bir bağlantı verildiğinde, elde edilen bağlantının gerçek/mutlak URL'sini döndürmem gerekir.PHP - mutlak URL'lere olan bağlantıları dönüştürmek

Örnek: Temel URL: http://www.somewebsite.com/files/page.html Bağlantı: ../index.php

Sonuç: http://somewebsite.com/index.php

bunu yapan bir kütüphane veya manuel olarak kodlamak için bir yol var mı?

+0

bu yardımcı olur

Umut. – ficuscr

+0

Olası kopyası [PHP: Göreli URL nasıl çözülür] (http://stackoverflow.com/questions/1243418/php-how-to-resolve-a-relative-url) – fusion3k

cevap

2

Bu fonksiyon regex olmadan $pgurlgöreli URL bir verilen geçerli sayfa URL çözecektir. Başarıyla giderir:

/home.php?example türlerini

aynı-dir nextpage.php tipleri,

../...../.../parentdir türlerini

tam http://example.net URL'ler,

ve steno //example.net url'lerin

//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); 
} 

Kullanımı Örnek:

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

nodots() URL mutlak dönüştürülür sonra çağrılmalıdır.

Nokta işlevi gereksizdir, ancak okunabilir, hızlıdır, normal ifadeleri kullanmaz ve normal URL'lerin% 99'unu çözer (% 100 emin olmak istiyorsanız, yalnızca anahtar bloğunu destekleyecek şekilde genişletin 6 + nokta, bir URL'de bu kadar çok nokta görmemiş olsam da. Sana bir yönlendirme değil, bir yeniden yazma bahsediyoruz de sürece ... Bu istemci tarafında belirleyebilir nasıl görmüyorum