操纵PHP domdocument字符串

I want to remove the element tag in my domdocument html.

I have something like

this is the <a href='#'>test link</a> here and <a href='#'>there</a>.

I want to change my html to

this is the test link here and there.

My code

 $dom = new DomDocument();
 $dom->loadHTML($html);
 $atags=$dom->getElementsByTagName('a');

 foreach($atags as $atag){
     $value = $atag->nodeValue;
//I can get the test link and there value but I don't know how to remove the a tag.                              
     }

Thanks for the help!

You are looking for a method called DOMNode::replaceChild().

To make use of that you need to create a DOMText of the $value (DOMDocument::createTextNode()) and also getElementsByTagName return a self-updating list, so when you replace the first element and then you go to the second, there is no second any longer, there is only one a element left.

Instead you need a while on the first item:

$atags = $dom->getElementsByTagName('a');
while ($atag = $atags->item(0))
{
    $node = $dom->createTextNode($atag->nodeValue);
    $atag->parentNode->replaceChild($node, $atag);
}

Something along those lines should do it.

You could just use strip_tags - it should do what you've asked.

<?php

$string = "this is the <a href='#'>test link</a> here and <a href='#'>there</a>.";

echo strip_tags($string);

// output: this is the test link here and there.