Здравствуйте! $curURL - абсолютная ссылка. $newURL - может быть как абсолютной, так и относительной ссылкой. Вот написал функцию NativeLink, которая ПО ИДЕЕ должна сравнивать ссылки $curURL и $newURL и выдавать $newURL, если эти ссылки на страницы из одного сайта. Если $curURL и $newURL указывают на ссылки из разных сайтов, то должна возвращаться пустая строка. Если $newURL относительная ссылка, то должна быть сформирована абсолютная ссылка. Вроде функция работает. Но очень хотелось бы, сделать код более оптимальным и устранить недостатки, учесть недочеты. Код (Text): 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; //так как www.site.ru эквавалентна 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 ""; } Заранее благодарен![/code]
scandal, тут на днях, в соседней теме писали аналогичное. там же можно почитать и советы, и комменты.