0

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!

1

2 Answers 2

1

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.

Sign up to request clarification or add additional context in comments.

2 Comments

I've tried almost the same but wondered why only the first <a> tag will be replaced while yours is working. The type of while loop you are using did the trick! nice
@hek2mgl: Yes, that's the one note I wrote: lists by getElementsByTagName are automatically updating to all current elements with that tagname. If you remove one element of those, the list changes.
0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.