scandal
Новичок
ссылки - "родственники"
Здравствуйте!
$curURL - абсолютная ссылка.
$newURL - может быть как абсолютной, так и относительной ссылкой.
Вот написал функцию NativeLink, которая ПО ИДЕЕ должна сравнивать ссылки $curURL и $newURL и выдавать $newURL, если эти ссылки на страницы из одного сайта.
Если $curURL и $newURL указывают на ссылки из разных сайтов, то должна возвращаться пустая строка.
Если $newURL относительная ссылка, то должна быть сформирована абсолютная ссылка.
Вроде функция работает. Но очень хотелось бы, сделать код более оптимальным и устранить недостатки, учесть недочеты.
Заранее благодарен![/code]
Здравствуйте!
$curURL - абсолютная ссылка.
$newURL - может быть как абсолютной, так и относительной ссылкой.
Вот написал функцию NativeLink, которая ПО ИДЕЕ должна сравнивать ссылки $curURL и $newURL и выдавать $newURL, если эти ссылки на страницы из одного сайта.
Если $curURL и $newURL указывают на ссылки из разных сайтов, то должна возвращаться пустая строка.
Если $newURL относительная ссылка, то должна быть сформирована абсолютная ссылка.
Вроде функция работает. Но очень хотелось бы, сделать код более оптимальным и устранить недостатки, учесть недочеты.
PHP:
function NativeLink($curURL, $newURL)
{
preg_match("/^(http:\/\/)?([^\/]+)/i", $curURL, $matches);// get domain name from URL
$maindomain = $matches[2];
preg_match("/^(http:\/\/)?([^\/]+)/i", $newURL, $matches);// get domain name from URL
if(isset($matches[2])) {
$domain = $matches[2];
preg_match("/[^\.\/]+\.[^\.\/]+$/", $domain, $matches);// get last two segments of host name
if(isset($matches[0])) {
$w1=0; $w2=0;
//так как [url]www.site.ru[/url] эквавалентна site.ru, приводим к одинаковому виду ссылки, затем сравниваем
if(substr($maindomain,0,4)=="www.") $w1=1;
if(substr($domain,0,4)=="www.") $w2=1;
if($w1==1 && $w2==0) $domain="www.".$domain;
if($w1==0 && $w2==1) $domain=substr($domain,4,strlen($domain)-4);
if($maindomain==$domain) return $newURL;
else return "";
}
else if(substr($newURL,0,3)=="../") { //ссылка на одном уровне выше
$k=strrpos($curURL,"/");
$s=substr($curURL,0,$k-1);
if(($k=strrpos($s,"/"))===false) return "";
else {
$s=substr($s,0,$k).substr($newURL,3,strlen($newURL)-3);
return $s;
}
}
else if(substr($newURL,0,2)=="./") { //ссылка с корневого каталога
$s="http://".$maindomain.substr($newURL,1,strlen($newURL)-1);
return $s;
}
}
else if(substr($newURL,0,1)=="/") { //ссылка с корневого каталога
$s="http://".$maindomain.$newURL;
return $s;
}
else return "";
}