Преобразование адреса

xmrz

Новичок
Преобразование адреса

Помогите пожалуйста с такой вещью:

есть сайт http://www.site.ru

на его странице http://www.site.ru/cat/vers1/page15.html есть ссылка ../page16.html

как правильно отпарсить и преобразовать конечную ссылку в абсолютный адрес?

что делать в случае с вариантами

../../page16.html
./page16.html
page16.html

Кто сталкивался, отпишите пожалуйста
 

kvf77

Red Devil
xmrz

первое правило - не делать таких дурных ссылок

а в остальном - берешь базовую ссылку, делаешь ей explode по '/' и отступаешь нужное кол-во шагов
 

Andreika

"PHP for nubies" reader
xmrz
а зачем? http://www.site.ru/cat/vers1/../../page1.html - нормальная (хоть и дурная©) ссылка )
 

Фанат

oncle terrible
Команда форума
претензии не по адресу.
человек сканирует ЧУЖОЙ сайт.
 

xmrz

Новичок
Да, совершенно верно, я сканирую чужой сайт

explode по '/'

а как с ./ и ../ или ../../ ?
 

kvf77

Red Devil
xmrz

воровство контента - это офтопик - если мы говорим о сканировании чужого сайта
 

xmrz

Новичок
нет, мы говорим о проверке, а не снесли ли уважаемые сайтообладатели ссылку на мой сайт или не обернули её в <noindex> </noindex>...
Так что всё в пределах общепринятой морали :)
 

kvf77

Red Devil
xmrz

ну не правда - в таком случае ссылки небыли бы оформлены таким образом - потому что при таком оформлении невозможно дать ссылку на другой сайт.
 

xmrz

Новичок
Речь идёт о взаимном обмене ссылками. Меня беспокоит, что отдельные личности после обмена убирают со своего сайта ссылку или закрывают от индексации. Цель - периодически обходить сайты с которыми я обменивался и проверять наличие ссылки на меня. Я всё уже написал, за исключением этого ньюанса...
 

kruglov

Новичок
Одна старая функция
PHP:
// превращение разных test/oops/../super/./here в test/super/here
function normalpath($path){
	$iterations=0;
	$newpath=$path;
	do{
		$iterations++;
		$path=$newpath;
		$newpath=preg_replace('/\/\.?\//','/',
			preg_replace('/[^\/]+\/\.\.\//','',$path)
		);
	}while($newpath!=$path && $iterations<255);
	return $newpath;
}
 

Profic

just Profic (PHP5 BetaTeam)
М, а [m]realpath[/m]() уже отменили? В сотрудничестве с [m]parse_url[/m](), если нужно.
 

Profic

just Profic (PHP5 BetaTeam)
kruglov
Упс. Перепутал с консольной realname :)
В качестве компенсации - мой вариант:
PHP:
<?php
function realname($path) {
    $path = preg_replace ('~/{2,}~', '/', $path);
    $path = preg_replace ('~/\.(?=/)~', '', $path);
    $path = preg_replace ('~/[^/]+(?R)*/\.\.(?=/)~', '', $path);
    $path = preg_replace ('~^(/\.\.)+(?=/)~', '', $path);
    return $path;
}

?>
 
Сверху