За последние 24 часа нас посетили 16852 программиста и 1648 роботов. Сейчас ищут 1526 программистов ...

ссылки - "родственники"

Тема в разделе "Прочие вопросы по PHP", создана пользователем scandal, 6 авг 2008.

  1. scandal

    scandal Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте!
    $curURL - абсолютная ссылка.
    $newURL - может быть как абсолютной, так и относительной ссылкой.
    Вот написал функцию NativeLink, которая ПО ИДЕЕ должна сравнивать ссылки $curURL и $newURL и выдавать $newURL, если эти ссылки на страницы из одного сайта.
    Если $curURL и $newURL указывают на ссылки из разных сайтов, то должна возвращаться пустая строка.
    Если $newURL относительная ссылка, то должна быть сформирована абсолютная ссылка.
    Вроде функция работает. Но очень хотелось бы, сделать код более оптимальным и устранить недостатки, учесть недочеты.

    Код (Text):
    1.  
    2. function NativeLink($curURL, $newURL)
    3. {
    4.     preg_match("/^(http:\/\/)?([^\/]+)/i", $curURL, $matches);// get domain name from URL
    5.     $maindomain = $matches[2];
    6.     preg_match("/^(http:\/\/)?([^\/]+)/i", $newURL, $matches);// get domain name from URL
    7.     if(isset($matches[2])) {
    8.         $domain = $matches[2];
    9.         preg_match("/[^\.\/]+\.[^\.\/]+$/", $domain, $matches);// get last two segments of host name
    10.         if(isset($matches[0])) {
    11.             $w1=0; $w2=0;
    12.             //так как www.site.ru эквавалентна site.ru, приводим к одинаковому виду ссылки, затем сравниваем
    13.             if(substr($maindomain,0,4)=="www.") $w1=1;
    14.             if(substr($domain,0,4)=="www.") $w2=1;
    15.             if($w1==1 && $w2==0) $domain="www.".$domain;
    16.             if($w1==0 && $w2==1) $domain=substr($domain,4,strlen($domain)-4);
    17.             if($maindomain==$domain) return $newURL;
    18.             else return "";        
    19.         }
    20.         else if(substr($newURL,0,3)=="../") { //ссылка на одном уровне выше
    21.             $k=strrpos($curURL,"/");
    22.             $s=substr($curURL,0,$k-1);
    23.             if(($k=strrpos($s,"/"))===false) return "";
    24.             else {
    25.                 $s=substr($s,0,$k).substr($newURL,3,strlen($newURL)-3);
    26.                 return $s;
    27.             }
    28.         }
    29.         else if(substr($newURL,0,2)=="./") { //ссылка с корневого каталога
    30.             $s="http://".$maindomain.substr($newURL,1,strlen($newURL)-1);
    31.             return $s;
    32.         }
    33.     }
    34.     else if(substr($newURL,0,1)=="/") { //ссылка с корневого каталога
    35.         $s="http://".$maindomain.$newURL;
    36.         return $s;
    37.     }
    38.     else return "";
    39. }
    Заранее благодарен![/code]
     
  2. Anonymous

    Anonymous Guest

    scandal, тут на днях, в соседней теме писали аналогичное. там же можно почитать и советы, и комменты.
     
  3. scandal

    scandal Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    4
    Симпатии:
    0
    Я, конечно же, почитаю. Но если есть что-то именно по моему коду, будет интересно узнать
     
  4. scandal

    scandal Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    4
    Симпатии:
    0
    А о какой именно теме Вы говорите?
     
  5. Cron

    Cron Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    289
    Симпатии:
    0
    Адрес:
    Украина, Сумы
    А чем не устраивает функция parse_url()?