Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Modify html attribute with php

Tags:

dom

php

I have a html string that contains exactly one a-element in it. Example:

   <a href="http://www.test.com" rel="nofollow external">test</a>

In php I have to test if rel contains external and if yes, then modify href and save the string.

I have looked for DOM nodes and objects. But they seem to be too much for only one A-element, as I have to iterate to get html nodes and I am not sure how to test if rel exists and contains external.

$html = new DOMDocument();
$html->loadHtml($txt);
$a = $html->getElementsByTagName('a');
$attr = $a->item(0)->attributes();
...

At this point I am going to get NodeMapList that seems to be overhead. Is there any simplier way for this or should I do it with DOM?

like image 1000
Linda Avatar asked Apr 21 '13 01:04

Linda


1 Answers

Is there any simplier way for this or should I do it with DOM?

Do it with DOM.

Here's an example:

<?php
$html = '<a href="http://example.com" rel="nofollow external">test</a>';
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query("//a[contains(concat(' ', normalize-space(@rel), ' '), ' external ')]");
foreach($nodes as $node) {
    $node->setAttribute('href', 'http://example.org');
}
echo $dom->saveHTML();
like image 172
uınbɐɥs Avatar answered Sep 20 '22 13:09

uınbɐɥs