Блог And-rey.ru Блог And-rey.ru Блог And-rey.ru
Логин:
Регистрация Пароль:

Начало / Преобразование относительных ссылок в абсолютные


And-rey:Преобразование относительных ссылок в абсолютные (09.11.09 20:32)
  
Посмотрев статистику увидел что в блог заходят - придется писать Well.
 
При парсинге rss заметил что иногда в них помещают относительные ссылки и адреса картинок.
Следующие две функции (PHP) позволяют изменить это.
 
Преобразование относительных ссылок в абсолютные.
PHP
  1. /*
  2. * преобразование относительных ссылок в абсолютные
  3. * $link - ссылка
  4. * $base_url - урл. относительно которого делаем преобразование
  5. * на выходе абсолютная ссылка
  6. */
  7. function abs_url ($link, $base_url) {
  8.    
  9.     if (!$link) return $base_url;
  10.    
  11.     $parse_url = parse_url($link);
  12.     $base      = parse_url($base_url);
  13.     $host_url  = $base['scheme'] . "://" . $base['host'];
  14.    
  15.     if ($parse_url['scheme']) {
  16.         $abs_url = $link;
  17.     } elseif ($parse_url['host']) {
  18.         $abs_url = "http://" . $link;
  19.     } else {                        // ссылка относительная
  20.         if (preg_match("!^/!", $link)) {
  21.             $abs_url = $host_url . $link;
  22.         } elseif (preg_match("!^(\.\./)+!", $link, $tt0)) {
  23.             $num = preg_match_all("!\.\./!", $tt0['0'], $tt1);
  24.             preg_match("!(.*)/(?:.+?/){{$num}}$!", dirname($base['path']) . "/", $tt2);
  25.             $abs_url = $host_url . $tt2['1'] . "/" . preg_replace("!^(\.\./){{$num}}!", "", $link);
  26.         } elseif (preg_match("!^\./!", $link)) {
  27.             $abs_url = $host_url . dirname($base['path']) . substr($link, 1);
  28.         } else {
  29.             $abs_url = $base_url . ((preg_match("!/$!", $base_url))?"":"/") . $link;
  30.         }
  31.     }
  32.    
  33.     return $abs_url;
  34.    
  35. }

Преобразование ссылок и адресов картинок в тексте в абсолютные.
(dom здесь использовать нет возможности - это как правило не стандартный html)
PHP
  1. /*
  2. * преобразует ссылки и адреса картинок в тексте в абсолютные
  3. * $text - текст
  4. * $base_url - урл. относительно которого делаем преобразование
  5. * на выходе текст с абсолютными ссылками
  6. */
  7. function abs_url_text ($text, $base_url) {
  8.    
  9.     define(BASE_URL, $base_url); // хм...
  10.    
  11.     $pattern = "!(src|href)\s*=\s*[\"']*(.*?)(?:[\"']|\s|>)!i";
  12.  
  13.     $text = preg_replace_callback(
  14.                 $pattern,
  15.                 create_function(
  16.                     '$matches',
  17.                     'return $matches[1] . "=\"" . abs_url($matches[2], BASE_URL) . "\"";'
  18.                 ),
  19.                 $text
  20.             );
  21.    
  22.     return $text;
  23.    
  24. }

 


  • RE: Гость: Андрей (22.03.12 03:53)
  • RE: Гость: Андрей (22.03.12 03:52)


<Ответить>
Имя:
Тема:*
Сообщение:[b] [i] [u] [s] [sub] [sup] [left] [center] [right] [justify] [img] [url] [youtube]   [help]
*
 

 

Я сделаю свой блог — с блэкджеком и шлюхами!

2006-2012, CC-BY: Andrey A.