|
|
|
| Пример: в $bufer находится HTML страница (как говориться в формате AS IS).
А теперь проблема: в $bufer все HTML теги href="tuttext" заметить на href="MOITEXT\tuttext"
Если не трудно объясните как из последовательности <a href="http://www.tmr.ru/">
можно извечь href="http://www.site.ru/"
Большое спасибо! | |
|
|
|
|
|
|
|
для: PHPFan
(08.07.2005 в 22:42)
| |
preg_replace("/\[href="\]\s*(\S*)\s*\[\"\]/i",'MOITEXT\\\1',$postbody);
|
Не очень хороший код. Жадный, но что умею =) | |
|
|
|
|
|
|
|
|
для: 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 ссылка'
Все прямые ссылки нужно оставить как есть. | |
|
|
|
|
|
|
|
для: PHPFan
(09.07.2005 в 15:32)
| | Стало ещё не понятнее зачем тогда извлекать ссылки, начинающиеся с http://? Относительные ссылки с чего начинаются? Т.е. $_SERVER['PHP_SELF'].'?url='.$url.'/' чем изначально была? | |
|
|
|
|
|
|
|
для: 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
(09.07.2005 в 20:34)
| | Есть мысль разбивать строку на массив (explode) по ключу "href=" но не знаю как дальше огранизовать механизм сверки с http:// :( | |
|
|
|
|
|
|
|
для: 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, $out, PREG_PATTERN_ORDER);
foreach($out[1] as $href)
{
echo $href."<br>";
}
?>
|
А в полученных строках следует искать имеется http:// или нет. | |
|
|
|
|
|
|
|
для: cheops
(10.07.2005 в 12:36)
| | Спасибо, href'ы вырезает хорошо. Считай полдела сделано. Что получиться отпостю сюда.
Упс.. оффтопнул.. | |
|
|
|
|
|
|
|
для: PHPFan
(10.07.2005 в 13:07)
| | Ничего не вышло.. Ваш код обеспечивает отсев, а надо замену href'ов. Т.е. реализуем возможность бродить по ссылкам "через скрипт". Получаем своего рода эксплорер, в которой каждая отображаемая страница будет сжата GZIP'ом.
Таким образом можно сёрфить по Интернету используя возможности сервера и экономя на оплате трафика. | |
|
|
|
|
|
|
|
для: 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];
}
?>
|
| |
|
|
|