За последние 24 часа нас посетили 18345 программистов и 1870 роботов. Сейчас ищут 1049 программистов ...

Абсолютный URL для ссылки, полученной из DOMDocument

Тема в разделе "PHP для новичков", создана пользователем Ruzzz, 12 июн 2009.

  1. Ruzzz

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

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    делаю так:
    Код (Text):
    1.  
    2. $dom = new DOMDocument();
    3. @$dom->loadHTML($html);
    4.  
    5. $nodes = $dom->getElementsByTagName('img');
    6. foreach ($nodes as $element) {
    7.         $link = $element->getAttribute('src');
    8.     }
    9. }
    Как гарантировано получить в $link абсолютный (полный) путь URL?
    Спасибо!
     
  2. Ruzzz

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

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    Ну хорошо, если src не содержит имя хоста, тогда путь относительный :). Далее, если в начале строки src есть знак «/» то это путь относительно «корня сайта» :), если же знака «/» нет, то относительно «папки с которой загрузили»

    Например пусть url-страницы с которой мы взяли html-код для работы c DOM будет «example.com/topic/about.htm», тогда если у нас ссылка будет иметь вид «/books.html», то это значит что она указывает на «example.com/books.html», а если же «books.html», то это значит что она указывает на «example.com/topic/books.html»

    И вот что мне от вас нужно, так это мнение - прав я или нет? :)
     
  3. Ruzzz

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

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    Ну вроде бы прав, осталось реализовать :) Еще вот как-бы «..» обрабатывать? Типа аналог realpath только для URL
     
  4. Ruzzz

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

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    вот что получилось:
    PHP:
    1. <?php
    2. // $page_url - URL страницы, html-код которой обрабатываем
    3. // $link_url - ссылка в html-коде
    4. function GetFullURL($page_url, $link_url) {
    5.     $link_url_staff = parse_url($link_url);
    6.     if (isset($link_url_staff['host'])) return $link_url;
    7.  
    8.     // TODO Processing '..'
    9.  
    10.     $page_url_staff = parse_url($page_url);
    11.     $link_path = $link_url_staff['path'];
    12.     if ($link_path[0] == '/') return $page_url_staff['scheme']."://".$page_url_staff['host'].$link_path; // TODO 'user' & 'pass'
    13.  
    14.     return dirname($page_url).'/'.$link_path;
    15. }
    16. ?>
    17.