PRIG_REPLACE来自HREF的更改链接

我需要替换curl获取的页面中的URL,并将正确的链接添加到图像和链接。我的php curl代码是:

<?php

$result = '<a href="http://host.org"><img src="./sec.png"></a>
<link href="./styles.css" rel="alternate stylesheet" type="text/css" />
<script type="text/javascript" src="./style.js"></script>';

echo $result;
 if (!preg_match('/src="https?://"/', $result)) {
        $result = preg_replace('/src="(http://([^/]+)/)?([^"]+)"/', "src="http://google.com/\3"", $result);
    }
echo $result;
if (!preg_match('/href="https?://"/', $result)) {
        $result = preg_replace('/href="(http://([^/]+)/)?([^"]+)"/', "href="http://google.com/\3"", $result);
    }
echo $result;

?>

输出为:

//original links
<a href="http://host.org"><img src="./sec.png"></a>
<link href="./styles.css" type="text/css" />
<script src="./style.js"></script><br />

//fixed SRC path
<a href="http://host.org"><img src="http://google.com/./sec.png"></a>
<link href="./styles.css" type="text/css" />
<script src="http://google.com/./style.js"></script>

//fixed HREF path
<a href="http://google.com//google.com/./sec.png"></a>
<link href="http://google.com/./styles.css" type="text/css" />
<script src="http://google.com/./style.js"></script>
但是当链接是"a"时,它会切断所有链接,只留下href值。

//from
<a href="http://host.org"><img src="./sec.png"></a>
//to src fix:
<a href="http://host.org"><img src="http://google.com/./sec.png"></a>
//ERRRROR when href fix make :
<a href="http://google.com//google.com/.sec.png"></a>

有谁能帮忙修理它吗?谢谢您


解决方案

从正则表达式中删除此不必要的部分:([^/]+)/

它使您的正则表达式与下一个标记中的url完全匹配。

编码:

$result = preg_replace('/src="(http://)?([^"]+)"/', "src="http://google.com/\2"", $result);
$result = preg_replace('/href="(http://)?([^"]+)"/', "href="http://google.com/\2"", $result);

结果:

<a href="http://google.com/host.org"><img src="http://google.com/./sec.png"></a> 
<link href="http://google.com/./styles.css" rel="alternate stylesheet" type="text/css" /> 
<script type="text/javascript" src="http://google.com/./style.js"></script>

但是!我认为您真正想要的是一种将相对URL替换为绝对URL的方法。 为此,您可以使用以下regexp(使用此选项,您可以跳过if-check):

$result = preg_replace('/src="(?!http://)([^"]+)"/', "src="http://google.com/\1"", $result);
$result = preg_replace('/href="(?!http://)([^"]+)"/', "href="http://google.com/\1"", $result);

相关文章