将相对链接设为绝对链接

时间:2012-03-17 17:36:18

标签: php hyperlink relative-path

我正在请求这样的网站的源代码:

<? $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 个答案:

答案 0 :(得分:10)

可以通过以下方式实现:

<?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;
?>

将输出如下链接:

  

/东西

将成为,

  

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

  

../东西

将成为,

  

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

但它不会编辑“data:image / png;”或锚标签。

我很确定正则表达式可以改进。

答案 1 :(得分:7)

此代码仅替换链接和图像:

<? $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 :(得分:2)

你不需要php,你只需要使用html5基本标签,并将你的php代码放在html体内,你只需要做以下事情 示例:

library(tidyverse)
df <- tibble(order=c(1,1,1,2,2,3,3,3), product=c('a','b','c','b','d','a','c','e')) %>%
group_by(product) %>%
summarise(order=toString(.$order)) %>%
mutate(order=str_split(order, ', ')

并且所有文件都将使用绝对网址