preg_replace更改img和链接路径以使用代理

时间:2009-08-09 19:44:43

标签: php regex preg-replace

我遇到了一个难以解决的问题。我正在替换a-tags和img-tags以符合我的建议。到目前为止一切都很好。

$search = array('|(<a\s*[^>]*href=[\'"]?)|', '|(<img\s*[^>]*src=[\'"]?)|');
$replace = array('\1proxy2.php?url=', '\1'.$url.'/');
$new_content = preg_replace($search, $replace, $content);

现在我的问题是页面上有链接我获取的内容如下:

<a href="/test/page/">

<a href="http://google.se/test/">

更换这两个链接后,如下所示:

<a href="proxy2.php?url=/test/page/">

<a href="proxy2.php?url=http://google.se/test/">

我的问题是,我希望在/ test / page /之前包含一个名为$ url的变量,并且只包含那些类似的链接,而不是之前已经是http://或https://的链接

4 个答案:

答案 0 :(得分:2)

这应该为锚标签做好工作,至少:

<?php
function prepend_proxy($matches) {
    $url = 'http://example.prefix';

    $prepend = $matches[2] ? $matches[2] : $url;
    $prepend = 'proxy2.php?url='. $prepend;

    return $matches[1] . $prepend . $matches[3];
}
$new_content = preg_replace_callback(
    '|(href=[\'"]?)(https?://)?([^\'"\s]+[\'"]?)|i',
    'prepend_proxy',
    $content
);
?>

答案 1 :(得分:0)

这可以解决问题

$search = array('@(<a\s*[^>]*href=[\'"]?)(https?://)?@');
$replace = array('\1proxy2.php?url=');
$new_content = preg_replace($search, $replace, $content);

结果:

  

&lt; a href =“proxy2.php?url = / test / page /”&gt;
  &lt; a href =“proxy2.php?url = google.se / test /”&gt;

答案 2 :(得分:0)

只需让您的proxy2.php更智能一点。如果有完全限定的网址(http://..。),请重定向到该网址。如果有本地网址(例如/ test / page /),请删除丢失的内容(例如http://www.mylittleapp.com/test/page/)并重定向。

答案 3 :(得分:0)

是我Sara。 Scronide,你的代码没有用。它仍然会返回:

<a href="proxy2.php?url=/test/page/">
<a href="proxy2.php?url=google.se/test/">

而不是我希望它显示的内容,我希望它显示为这样,并在前面加上网址:

<a href="proxy2.php?url=**THEURLHERE.COM**/test/page/">
<a href="proxy2.php?url=google.se/test/">

抱歉,我工作,我正在使用URL VARIABEL做错了。谢谢你![/ p>