使用PHP替换href =“”之间的特定完整链接

时间:2011-12-13 13:49:17

标签: php regex string preg-replace html-parsing

我试过搜索相关答案,但找不到适合我特定需求的东西。我在一个wordpress网站上的文章中有1000多个联盟链接 - 所有文章都以相同的网址格式和子域结构开头:

http://affiliateprogram.affiliates.com/

但是,在初始url格式之后,附加的查询字符串会针对每个单独的URL进行更改,以便将访问者发送到目标站点上的特定页面。

我正在寻找能够扫描包含上述特定域的所有href链接的一串html代码(文章正文)的内容,然后用我的另一个标准链接替换THE WHOLE LINK(无论附加的查询字符串)选择。

href="http://affiliateprogram.affiliates.com/?random=query_string&page=destination"

替换为

href="http://www.mylink.com"

我最好通过php 来做这件事,因为我有一个基本的把握,但如果你有任何其他的建议我会很感激所有的输入。

提前致谢。

4 个答案:

答案 0 :(得分:1)

<?php

$html = 'href="http://affiliateprogram.affiliates.com/?random=query_string&page=destination"';

echo preg_replace('#http://affiliateprogram.affiliates.com/([^"]+)#is', 'http://www.mylink.com', $html);

?>

http://ideone.com/qaEEM

答案 1 :(得分:1)

使用正则表达式,例如:

href="(https?:\/\/affiliateprogram.affiliates.com\/[^"]*)"

$data =<<<EOT
  <a href="http://affiliateprogram.affiliates.com/?random=query_string&page=destination">bar</a>
  <a href="http://stackoverflow.com/questions/8490284/replace-specifc-full-links-between-href-using-php">foo</a>
  <a name="zz" href="http://affiliateprogram.affiliates.com/?query=random&page=destination&string">baz</a>
EOT;

echo (
  preg_replace (
    '#href="(https?://affiliateprogram.affiliates.com/[^"]*)"#i',
    'href="http://www.mylink.com"',
    $data
  )
);

输出

<a href="http://www.mylink.com">bar</a>
<a href="http://stackoverflow.com/questions/8490284/replace-specifc-full-links-between-href-using-php">foo</a>
<a name="zz" href="http://www.mylink.com">baz</a>

答案 2 :(得分:0)

$a = '<a class="***" href="http://affiliateprogram.affiliates.com/?random=query_string&page=destination" attr="***">';

$b = preg_replace("/<a([^>]*)href=\"http:\/\/affiliateprogram\.affiliates\.com\/[^\"]*\"([^>]*)>/", "<a\\1href=\"http://www.mylink.com/\"\\2>", $a);

var_dump($b); // <a class="***" href="http://www.mylink.com/" attr="***">

答案 3 :(得分:-1)

这很简单,因为你只需要一个查询字符串的占位符。 .*?通常会这样做,但您可以通过匹配任何不是双引号的内容来使其更具体:

$html =
preg_replace('~ href="http://affiliateprogram\.affiliates\.com/[^"]*"~i',
              ' href="http://www.mylink.com"', $html);

人们可能会来到这里并推荐一个长途方法,但这对于这样的任务来说可能有点过头了。