【问题标题】:Searching for URLS in string and add query string to each one problem在字符串中搜索 URLS 并将查询字符串添加到每个问题
【发布时间】:2021-06-03 06:58:54
【问题描述】:

我为此编写了这个脚本,但有一个我无法解决的问题:

$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>

有什么帮助吗?

【问题讨论】:

    标签: php regex str-replace


    【解决方案1】:

    问题来自:

    • $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""
    }
    

    然后str_replace$searches 中的所有 元素替换为$replaces 中的所有 元素,因此,http://wwww.domain.comhttp://wwww.domain.com?mode=testing AND http://wwww.domain.com?id=2http://wwww.domain.com?mode=testing?id=2(在 domain.com 之后附加 ?mode=testing

    这是一个解决方案:

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

    $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>
    

    【讨论】:

    • Aww 太棒了@toto,它工作得很好!!,我花了 1 周时间试图解决这个问题:p
    • @WPDeveloper:不客气,很高兴它有帮助。
    猜你喜欢
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    相关资源
    最近更新 更多