Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Собрать полный url


Автор: nepster 20.10.2013, 23:20
Собственно пишу парсер, и попал в такой вот просак. Есть страница:

Код
http://nodejs.org/api/


Тут есть вот такие вот ссылки 
Код

<li><a href="documentation.html">About these Docs</a></li>
<li><a href="synopsis.html">Synopsis</a></li>
<li><a href="assert.html">Assertion Testing</a></li>
<li><a href="buffer.html">Buffer</a></li>
<li><a href="addons.html">C/C++ Addons</a></li>
<li><a href="child_process.html">Child Processes</a></li>
<li><a href="cluster.html">Cluster</a></li>
<li><a href="console.html">Console</a></li>
<li><a href="crypto.html">Crypto</a></li>


Полный адрес которых, вот такой:
Код

http://nodejs.org/api/documentation.html
...



Я начил парсить с главной тсраницы и моя функция 


Код

    // Получаем полную ссылку к странице нашего сайта 
    public static function getFullUrl($link, $myLink)
    {
        // сразу избавимся от www, если есть
        $myLink = str_replace('//www.','//',$myLink);
        $link   = str_replace('//www.','//',$link);
        
        $parse_url = parse_url($link);
        
        if(isset($parse_url['scheme']) && isset($parse_url['host']))
        {
            if(isset($parse_url['path']))
            {
                return $myLink.$parse_url['path'];
            }
            else
            {
                return $link;
            }
        }
        
        
        if(!isset($parse_url['scheme']) && !isset($parse_url['host']) && isset($parse_url['path']))
        {           
            if(substr($link,0,1) != '/')
            {
                $path  = (isset($parse_url['path']))  ? '/'.$parse_url['path']  : '';
                $query = (isset($parse_url['query'])) ? '/'.$parse_url['query'] : '';
                
                return $myLink.$path.$query; 
            }
            
            return $myLink.$link;
        }
        
        return false;
    }  


честно подставила домен
Код

http://nodejs.org/documentation.html


а правильный вариант:
Код

http://nodejs.org/api/documentation.html



Подскажите пожалуйста, можно ли как то исправить ситуацию ? 

Автор: Sanchezzz 21.10.2013, 02:39
Проверку делай если в начале нету 
/ - означает что путь с корня сайта 
или 
// - домен  + с путь начинается с корня

Далее тебе известно на какой ты странице парсишь.

Если ты встречаешь ссылки "doc.html" то ты присваиваешь этой ссылке путь текущей дериктории.

Например если парсер забрел  на страницу /api/docs.php

то мы выясняем путь папки /api/ этот путь и будет базовым для всех  ссылок у которых не задан полный путь.

 

Автор: nepster 21.10.2013, 11:05
большое спасибо, тоже так думал, но еще надеялся на какое-то невелосипедное решение .

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)