首页 > 解决方案 > 在字符串中搜索 URL,并为每个问题添加查询字符串

问题描述

我写了这个脚本来做到这一点,但有一个我无法弄清楚的问题:

$buffer = '<a href="http://wwww.domain.com">Domain1</a>';
$buffer .= '<a href="http://wwww.domain.com?id=2">Domain2</a>';

preg_match_all('/<a href="(.*?)"/s', $buffer, $matches);

$searches = array();
$replaces = array();

foreach($matches[1] as $link){

    $contain = parse_url($link, PHP_URL_QUERY);

    $symbol = $contain ? "&" : "?";

    $new_link = $link . $symbol . "mode=testing";

    $searches[] = $link;

    $replaces[] = $new_link;

}
$newbuffer = str_replace($searches ,$replaces , $buffer);

var_dump($newbuffer);

输出:

<a href="http://wwww.domain.com?mode=testing">Domain1</a>
<a href="http://wwww.domain.com?mode=testing?id=2">Domain2</a>

将参数添加到每个链接的预期输出:

<a href="http://wwww.domain.com?mode=testing">Domain1</a>
<a href="http://wwww.domain.com?id=2&mode=testing">Domain2</a>

有什么帮助吗?

标签: phpregexstr-replace

解决方案


问题来自:

  • $searches包含:
array(2) {
  [0]=>
  string(24) ""http://wwww.domain.com""
  [1]=>
  string(29) ""http://wwww.domain.com?id=2""
}
  • $replaces包含:
array(2) {
  [0]=>
  string(37) ""http://wwww.domain.com?mode=testing""
  [1]=>
  string(42) ""http://wwww.domain.com?id=2&mode=testing""
}

然后用ANDstr_replace替换所有元素from$searches所有元素$replaces_ _ _ _http://wwww.domain.comhttp://wwww.domain.com?mode=testing http://wwww.domain.com?id=2http://wwww.domain.com?mode=testing?id=2?mode=testingdomain.com

这是一个解决方案:

"在两个数组中的链接周围添加。

$buffer = '<a href="http://wwww.domain.com">Domain1</a>';
$buffer .= '<a href="http://wwww.domain.com?id=2">Domain2</a>';

preg_match_all('/<a href="(.*?)"/s', $buffer, $matches);

$searches = array();
$replaces = array();

foreach($matches[1] as $link){
    $contain = parse_url($link, PHP_URL_QUERY);
    $symbol = $contain ? "&" : "?";
    $new_link = $link . $symbol . "mode=testing";
    $searches[] = '"' . $link . '"';
    $replaces[] = '"' . $new_link . '"';
}
$newbuffer = str_replace($searches ,$replaces , $buffer);
var_dump($newbuffer);

输出:

<a href="http://wwww.domain.com?mode=testing">Domain1</a>
<a href="http://wwww.domain.com?id=2&mode=testing">Domain2</a>

推荐阅读