使用PHP DOMDocument更改标记属性值

app*_*tix 22 php tags attributes dom domdocument

我想用PHP DOMDocument更改标记属性的值.

例如,假设我们有这行HTML:

<a href="http://foo.bar/">Click here</a>
Run Code Online (Sandbox Code Playgroud)

我在PHP中加载上面的代码如下:

$dom = new domDocument;
$dom->loadHTML('<a href="http://foo.bar/">Click here</a>');
Run Code Online (Sandbox Code Playgroud)

我想使用PHP的DOMDocument扩展名将"href"值更改为"http://google.com/".这可能吗?

一如既往地感谢您的帮助!

phi*_*bar 35

$dom = new DOMDocument();
$dom->loadHTML('<a href="http://foo.bar/">Click here</a>');

foreach ($dom->getElementsByTagName('a') as $item) {

    $item->setAttribute('href', 'http://google.com/');
    echo $dom->saveHTML();
    exit;
}
Run Code Online (Sandbox Code Playgroud)


小智 7

$dom = new domDocument;
$dom->loadHTML('<a href="http://foo.bar/">Click here</a>');

$elements = $dom->getElementsByTagName( 'a' );

if($elements instanceof DOMNodeList)
    foreach($elements as $domElement)
        $domElement->setAttribute('href', 'http://www.google.com/');
Run Code Online (Sandbox Code Playgroud)

  • 赞成,因为您包含了类型检查,但请记住,在类似 C 的语言中,*总是*将条件或循环的主体括在花括号中是一个好主意,即使它只有一个语句(因为如果您稍后添加另一个语句)声明并忘记添加大括号,它会“看起来”像是身体的一部分,但实际上不是;这可能会导致很难发现的错误)。 (3认同)
  • 类型检查在这里实际上是无用的;`DOMDocument::getElementsByTagName` 总是返回一个 `DOMNodeList`,因此 `if` 块将始终运行。 (2认同)