Removing a span from a DOM object but not the content and save it to a variable
Let's say I have the following string:
<span>This <b>is</b> an <span class="something">example</span></span>
And I want to remove the spans but not the content.
$content = '<span>This <b>is</b> an <span class="something">example</span></span>';
$dom = new DOMDocument();
$dom->loadXML($content);
$nodes = $dom->getElements开发者_如何学PythonByTagName('span');
foreach ($nodes as $node) {
// remove span but not content
}
$dom->save($var); // $dom->save() saves to file but I want to save to $var
So that $var
contains: This <b>is</b> an example
.
So basically I have two questions:
- How to remove the
span
s - How to save the stripped string to a variable
Something like this should do the trick:
<?php
function removeTag($content, $tagName) {
$dom = new DOMDocument();
$dom->loadXML($content);
$nodes = $dom->getElementsByTagName($tagName);
while ($node = $nodes->item(0)) {
$replacement = $dom->createDocumentFragment();
while ($inner = $node->childNodes->item(0)) {
$replacement->appendChild($inner);
}
$node->parentNode->replaceChild($replacement, $node);
}
return $dom->saveHTML();
}
$content = '<span>This <b>is</b> an <span>example</span></span>';
echo removeTag($content, 'span'); // echos "This <b>is</b> an example"
EDIT:
<?php
$content = '<span><h1><span>This <b>is</b> an <span>example</span></span></h1></span>';
$dom = new DOMDocument();
$dom->loadXML($content);
for ($node = $dom->getElementsByTagName('span')->item(0);
$node !== null;
$node = $dom->getElementsByTagName('span')->item(0)) {
// merge into parent
$parent = $node->parentNode;
$parent->removeChild($node);
for ($el = $node->firstChild; $el !== null; $el = $el->nextSibling) {
$parent->appendChild($el->cloneNode(true));
}
}
echo $dom->saveHTML();
<?php
$content = '<span>This is an <span>example</span></span>';
$dom = new DOMDocument();
$dom->loadXML($content);
echo $dom->documentElement->textContent;
Or more simply:
echo strip_tags($content);
精彩评论