开发者

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:

  1. How to remove the spans
  2. 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);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜