Сделайте относительные ссылки в абсолютные - PullRequest
6 голосов
/ 17 марта 2012

Я запрашиваю исходный код такого сайта:

<? $txt = file_get_contents('http://stats.pingdom.com/qmwwuwoz2b71/522741');
echo $txt; ?>

Но я бы хотел заменить относительные ссылки на абсолютные! В основном,

<img src="/images/legend_15s.png"/> and <img src='/images/legend_15s.png'/>

следует заменить на

<img src="http://domain.com/images/legend_15s.png"/> 

и

<img src='http://domain.com/images/legend_15s.png'/>

соответственно. Как я могу это сделать?

Ответы [ 3 ]

10 голосов
/ 17 октября 2012

Это может быть достигнуто с помощью:

<?php 
$input = file_get_contents('http://stats.pingdom.com/qmwwuwoz2b71/522741');

$domain = 'http://stats.pingdom.com/';
$rep['/href="(?!https?:\/\/)(?!data:)(?!#)/'] = 'href="'.$domain;
$rep['/src="(?!https?:\/\/)(?!data:)(?!#)/'] = 'src="'.$domain;
$rep['/@import[\n+\s+]"\//'] = '@import "'.$domain;
$rep['/@import[\n+\s+]"\./'] = '@import "'.$domain;
$output = preg_replace(
    array_keys($rep),
    array_values($rep),
    $input
);

echo $output;
?>

Который будет выводить ссылки следующим образом:

/ * то 1007 *

станет,

http://stats.pingdom.com//something

И

.. / * то 1020 *

станет,

http://stats.pingdom.com/../something

Но он не будет редактировать "data: image / png;" или якорные теги.

Я почти уверен, что регулярные выражения можно улучшить.

7 голосов
/ 17 марта 2012

Этот код заменяет только ссылки и изображения:

<? $txt = file_get_contents('http://stats.pingdom.com/qmwwuwoz2b71/522741');
$txt = str_replace(array('href="', 'src="'), array('href="http://stats.pingdom.com/', 'src="http://stats.pingdom.com/'), $txt);
echo $txt; ?>

Я проверил и работает:)

ОБНОВЛЕНО

Здесь сделано с регулярным выражением и работает лучше:

<? $txt = file_get_contents('http://stats.pingdom.com/qmwwuwoz2b71/522741');
$domain = "http://stats.pingdom.com";
$txt = preg_replace("/(href|src)\=\"([^(http)])(\/)?/", "$1=\"$domain$2", $txt);
echo $txt; ?>

Готово: D

2 голосов
/ 22 июля 2017

Вам не нужен php, вам нужно только использовать базовый тег html5 и поместить свой php-код в html body, вам нужно всего лишь сделать следующий пример:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <base href="http://yourdomain.com/">
</head>
<body>
<? $txt = file_get_contents('http://stats.pingdom.com/qmwwuwoz2b71/522741');
echo $txt; ?>
</body>
</html>

и все файлы будутиспользуйте абсолютный URL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...