PDA

Просмотр полной версии : Обработка ссылок.


rcc0023
07.12.2008, 15:09
Скрипт загружает контекст внешней страницы, значение которой присваивается переменной $content

Данный код делает из скрипта полноценный прокси...

preg_match_all("#(<a|link|area)[\s].*?href[\s]*=[\s]*\\\?\"?'?(.*?)\\\?[\"'\s>]#is",$content,$href_array);
replace($href_array[0],$href_array[0],$href_array[2],"?session=","");
preg_match_all("#<(img|embed|frame|iframe|input|script)[\s][^>]*?src[\s]*=[\s]*\\\?\"?'?([^>]*?)\\\?[\"'\s>]#is",$content,$src_array);
replace($src_array[0],$src_array[0],$src_array[2],"?session=","");
preg_match_all("#\.src[\s]*=[\s]*[\"'](.*?)[\"']#is",$content,$script_src_array);
replace($script_src_array[0],$script_src_array[0],$script_src_array[1],"?session=","");
preg_match_all("#<(body|table|td)[\s].*?background[\s]*=[\s]*\"?'?(.*?)[\"'\s>]#is",$content,$background_array);
replace($background_array[0],$background_array[0],$background_array[2],"?session=","");
preg_match_all("#(location.href|document.location|document.url|par ent.location)[\s]*=[\s]*[\"'](.*?)[\"']#is",$content,$location_array);
replace($location_array[0],$location_array[0],$location_array[2],"?session=","");
preg_match_all("#(window.open|location.assign)\([\"'](.*?)[\"',\s>\)]#is",$content,$window_array);
replace($window_array[0],$window_array[0],$window_array[2],"?session=","");
preg_match_all("#[\"'](https?://.*?|https?%3A%2F%2F.*?)[\"'\s\)>]#is",$content_script,$http_array);
replace($http_array[0],$http_array[0],$http_array[1],"?session=","");


Что нужно изменить чтоб скрипт стал полу-прокси. То есть загружал через себя страницы (изменял ссылки вида <a_href=></a>), но остальной контекст брал с внешнего сайта (ссылки на стиль, картинки, флеш делал прямыми)?

rcc0023
07.12.2008, 15:59
не проходите мимо... =/ очень нужна помощь...

Pashkela
07.12.2008, 16:48
Давай ссылку на нужный сайт, откуда надо парсить и изменять, если не можешь - то образец исходников нужного сайта + четкое условие того, что надо спарсить, т.е. вот это " <a_href=></a>)" не совсем понятно, + четкое условие на что заменить внутри, не трогая остальное

а также почитай вот эту страницу

http://forum.antichat.ru/threadnav92492-7-10.html

от начала и до конца

rcc0023
07.12.2008, 19:12
Интересненько...

А сайт такой: http://demo.heroeswm.ru/demobattle.php

Из такого кода replace($href_array[0],$href_array[0],$href_array[2],"?session=",""); получается <a href='?session='kdsfjhskdjfhkjsdhfkjhskjs?> , kdsfjhskdjfhkjsdhfkjhskjs - заходированный юрл, что и нужно.

это <img src='i/pic.jpg'> нужно заменить на <img src='http://demo.heroeswm.ru/i/pic.jpg'>

это <embed src="swffiles/combat1.swf?ver=268"
на <embed src="http://demo.heroeswm.ru/swffiles/combat1.swf?ver=268"

Gifts
07.12.2008, 21:03
rcc0023 Вроде бы так. Заменит все относительные ссылки, а абсолютные оставит неизменными
$in='<a href="/swffiles/combat1.swf?ver=268">asdasd</a>';

$newsite='http://site.com/';
echo preg_replace('#(src|href)=[\'"](?!http)/?([^\'"]*)[\'"]#i',"\$1='$newsite\$2'",$in);

rcc0023
07.12.2008, 21:29
А как это все будет выглядеть при использовании replace ??

Gifts
07.12.2008, 21:33
rcc0023 Я не знаю, что это за функция у тебя) Для моего кода - в качестве $in берешь всю страницу исходную, тогда preg_replace все заменит.