Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как вытянуть href из html
 
 автор: PHPFan   (08.07.2005 в 22:42)   письмо автору
 
 

Пример: в $bufer находится HTML страница (как говориться в формате AS IS).
А теперь проблема: в $bufer все HTML теги href="tuttext" заметить на href="MOITEXT\tuttext"

Если не трудно объясните как из последовательности <a href="http://www.tmr.ru/">
можно извечь href="http://www.site.ru/"

Большое спасибо!

   
 
 автор: Akira   (09.07.2005 в 03:07)   письмо автору
 
   для: PHPFan   (08.07.2005 в 22:42)
 


preg_replace("/\[href="\]\s*(\S*)\s*\[\"\]/i",'MOITEXT\\\1',$postbody);

Не очень хороший код. Жадный, но что умею =)

   
 
 автор: cheops   (09.07.2005 в 11:40)   письмо автору
 
   для: PHPFan   (08.07.2005 в 22:42)
 

Добавлю лишь ссылку на что-то похожее http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=2731

   
 
 автор: PHPFan   (09.07.2005 в 15:32)   письмо автору
 
   для: cheops   (09.07.2005 в 11:40)
 

Почитал.. http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=2731 немного не по моей задаче.
Запутал я вас. Конечная цель в переменной $bufer заменить все относительные href ссылки на последовательность: $_SERVER['PHP_SELF'].'?url='.$url.'/'.'тут относительная href ссылка'
Все прямые ссылки нужно оставить как есть.

   
 
 автор: cheops   (09.07.2005 в 20:12)   письмо автору
 
   для: PHPFan   (09.07.2005 в 15:32)
 

Стало ещё не понятнее зачем тогда извлекать ссылки, начинающиеся с http://? Относительные ссылки с чего начинаются? Т.е. $_SERVER['PHP_SELF'].'?url='.$url.'/' чем изначально была?

   
 
 автор: PHPFan   (09.07.2005 в 20:34)   письмо автору
 
   для: cheops   (09.07.2005 в 20:12)
 

Изначально мысль была такая: сделать своего рода GZIP Explorer на PHP. Т.е. с помощью file_get_contents получать содержимое нужной страницы в переменную и выводить в сжатом виде на экран.
В простейшем варианте можно сделать так:

<?php
ob_start
('ob_gzhandler');
$url $_GET['url'];
$bufer file_get_contents($url);
print 
$bufer;
?>

Думаю идея уже ясна. Прекрасно понимаю что использование сервера нерационально, но у нас свой сервак, поэтому проблем с нагрузкой нет.
В общем всё бы хорошо, но бьются относительные ссылки при отображении готовой страницы. Проблему с прямыми ссылками можно решить так:
$bufer = str_replace('http://',$_SERVER['PHP_SELF'].'?url=http://',$bufer);
А вот с относительными ссылками никак не получается :((

P.S. код выдирающий список URL со страницы это просто супер. Думаю стоит открыть спец. колонку для публикации подобных нужных вещей.

   
 
 автор: PHPFan   (10.07.2005 в 12:20)   письмо автору
 
   для: PHPFan   (09.07.2005 в 20:34)
 

Есть мысль разбивать строку на массив (explode) по ключу "href=" но не знаю как дальше огранизовать механизм сверки с http:// :(

   
 
 автор: cheops   (10.07.2005 в 12:36)   письмо автору
 
   для: PHPFan   (10.07.2005 в 12:20)
 

Да и при помощи регулярных выражений вырезать дело не хритрое
<?php
  $text 
"<b>Куча текста а посередине <a href=forum/index.php?id_forum=3>ссылка</a> - a зачам ссылка, сам не <a href=http://www.softtime.ru/forum/info.php?id_forum=5&id_author=7>знаю...</a></div>";
  
preg_match_all("|href=([^>]+)|i",$text$outPREG_PATTERN_ORDER);
  foreach(
$out[1] as $href)
  {
    echo 
$href."<br>";
  }
?>

А в полученных строках следует искать имеется http:// или нет.

   
 
 автор: PHPFan   (10.07.2005 в 13:07)   письмо автору
 
   для: cheops   (10.07.2005 в 12:36)
 

Спасибо, href'ы вырезает хорошо. Считай полдела сделано. Что получиться отпостю сюда.
Упс.. оффтопнул..

   
 
 автор: PHPFan   (10.07.2005 в 15:20)   письмо автору
 
   для: PHPFan   (10.07.2005 в 13:07)
 

Ничего не вышло.. Ваш код обеспечивает отсев, а надо замену href'ов. Т.е. реализуем возможность бродить по ссылкам "через скрипт". Получаем своего рода эксплорер, в которой каждая отображаемая страница будет сжата GZIP'ом.
Таким образом можно сёрфить по Интернету используя возможности сервера и экономя на оплате трафика.

   
 
 автор: cheops   (10.07.2005 в 15:37)   письмо автору
 
   для: PHPFan   (10.07.2005 в 15:20)
 

Я привел только регулярное выражение... в вашем случае, плюс к этому следует использовать функцию обратного вызова
<?php
  $text 
"<b>Куча текста а посередине <a href=forum/index.php?id_forum=3>ссылка</a> - a зачам ссылка, сам не <a href=http://www.softtime.ru/forum/info.php?id_forum=5&id_author=7>знаю...</a></div>";
  echo 
preg_replace_callback("|href=([^>]+)|i""http_replace"$text);
  function 
http_replace($matches)
  {
    if(
strpos($matches[1], "http://") !== FALSE) return "href=".$matches[1];
    else return 
"href=http://".$_SERVER['SERVER_NAME']."/".$matches[1];
  }
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования