PHP 满足条件时更改 href

PHP change href when condition is met

我正在使用 PHP foreach 循环遍历一组超链接。 如果满足条件,我想更改超链接的 href。如果没有,循环可以继续。 我可以使用以下命令回显当前 href: echo $node->getAttribute( 'href' ); 但是我无法使用以下方法更改它:$node->setAttribute('href', "https://www.website2.com");

我在这里遗漏了一些东西,但我已经坚持了一段时间。

完整代码:

  $dom = new DOMDocument;
  $dom->loadHTML($homepage);
  foreach ($dom->getElementsByTagName('a') as $node) {
    if ($node->getAttribute( 'href' ) == "https://www.website1.com"  ) {
      echo $node->getAttribute( 'href' );
      $node->setAttribute('href', "https://www.website2.com");
    }
  }
$html = $dom->saveHTML();

也许,如果您仍然遇到问题,以下内容会有所帮助。

<?php

    $strhtml="<!DOCTYPE html>
        <html lang='en'>
            <head>
                <meta charset='utf-8' />
                <title>Find and Replace</title>
            </head>
            <body>
                <h1>hmmmm</h1>
                <a href='https://www.example.com'>link #1</a>
                <a href='https://www.example.com'>link #2</a>
                <a href='https://www.example.com'>link #3</a>
            </body>
        </html>";
    
    $find='https://www.example.com';
    $repl='https://www.big-yellow-banana.com';
    
    
    $dom=new DOMDocument;
    $dom->loadHTML( $strhtml );
    
    
    $xp=new DOMXpath( $dom );
    $col=$xp->query( sprintf( '//a[ starts-with( @href, "%s" ) ]', $find ) );
    
    if( $col && $col->length > 0 ){
        foreach($col as $node){
            $node->setAttribute('href',str_replace($find,$repl,$node->getAttribute('href') ) );
        }
    }


    printf( 
        'Original:<textarea cols=100 rows=20>%s</textarea>
        <br />
        Modified:<textarea cols=100 rows=20>%s</textarea>
        <br />
        <br />
        Save this document to keep changes.... ie: $dom->saveHTML("/path/to/my-html-file.html");', $strhtml, $dom->saveHTML() );
?>

哪个应该产生: