2015-12-04 4 views
0

Orignal КодPHP preg_replace с ЦСИ ../

<script language="javascript" src="/lta/vrl/scripts/vrlCommons.js"></script> 
<script language="JavaScript" src="../scripts/formObjCommons.js"></script> 

Мой код

$url = "https ://example.com"; 
$url2 = "https ://example.com/lta/vrl"; 
$result = file_get_contents('https://example.com', false, $context); 
$result = preg_replace('/src="(https:\/\/)?([^"]+)"/', "src=\"$url\\2\"", $result); 

Как сделать это?

<script language="javascript" src="$url/lta/vrl/scripts/vrlCommons.js"></script> 
    <script language="JavaScript" src="$url2/scripts/formObjCommons.js"></script> 

ответ

0

Если вы собираетесь посещать случайные страницы в Интернете с file_get_contents, и пытаются переписать контексты страницы, чтобы указать назад на вашем домене позволяет существенно создать прокси-браузер, вы должны знаете, что есть много неправильных веб-страниц. Не пытайтесь разобрать HTML с регулярным выражением, как описано здесь: RegEx match open tags except XHTML self-contained tags

Что я бы предположить, однако, было бы использовать разбор двигатель HTML, который может компенсировать шум в HTML, исправление искаженных документов, плавающий угловые скобки , и преобразовать проблемные символы в объекты, наконец, позволяя вам анализировать документ как HTML-страницу, так же, как JavaScript может ходить по узлам страницы.

PHP-библиотека, я клянусь, и успешно используется на крупных проектах, даже с содержанием SEO связанных и длинных документов без запуска в регулярных выражений пределы Memeory, является http://simplehtmldom.sourceforge.net/ После загрузки, все, что вам нужно сделать, это включить simple_html_dom.php в ваш проект. Затем, чтобы использовать библиотеку с вашим кодом, вы должны:
$dom = str_get_html($result); Оттуда используйте DOM-методы, упомянутые в manual. Сначала выберите все элементы, которые вы хотите изменить, или все элементы *. Затем перебирает их и проверяет, установлен ли атрибут src. Если это так, возьмите значение src, которое является его URL-адресом, а затем замените его домен на ваш домен. Чтобы сделать это, не используйте регулярное выражение, существует много структур URL-адресов, и может быть сложно проверить значение //, что означает использование текущей схемы или субдоменов, чтобы вы не знали, сколько точек нужно искать или пытаться для поиска косой черты, возможно, один не появится, и вы столкнетесь с ? с указанием строки запроса или # для хэша. Или, чтобы полностью вывести всю вашу логику из воды, вы можете столкнуться с @, который ставит имя пользователя, за которым следует двоеточие, а затем пароль, за которым следует домен ... Там есть ДЕЙСТВИТЕЛЬНО простой способ сделать это с PHP, поскольку они имеют дизайн функции специально для замены частей URL-адресов новыми. Функция http_build_url. Однако, к сожалению, он широко не поддерживается и, вероятно, недоступен на вашем сервере. Существует альтернатива here, которая определяет ее для вас, если она не существует. Я не знаю, насколько это надежно, но я полагаю, что это зависит от parse_url, функции, которую я бы предложил в противном случае. Идея состоит в том, что вы будете анализировать URL-адрес, захватить хост-часть, которую вы хотите, а затем вручную восстановить URL. Но мне больше нравится http_build_url, потому что работа становится легким однострочным.

Чтобы проверить функцию http_build_url, вы можете попробовать:

echo http_build_url('http://google.com/search?q=yay',array('host'=>'example.com')); 

После того, как вы получили эту работу, вы должны знать, как легко заменить URL. Затем вам нужно будет использовать библиотеку разбора Simple HTML DOM, с которой я связал вас, прежде чем обновлять атрибут src до вашего нового URL-адреса.

После того, как вы внесли изменения в документ DOM, вы могли бы сделать:

$result=$dom->save();

Тогда вы будете иметь обновленный документ загружен обратно в $result строки вы работаете, и готовый доставить пользователю для вашего браузера прокси.