从DOM对象中删除范围但不删除内容并将其保存到变量中

Pee*_*Haa 3 php dom html-parsing domdocument

假设我有以下字符串:

<span>This <b>is</b> an <span class="something">example</span></span>

我想删除跨度而不是内容.

$content = '<span>This <b>is</b> an <span class="something">example</span></span>';

$dom = new DOMDocument();
$dom->loadXML($content);

$nodes = $dom->getElementsByTagName('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
Run Code Online (Sandbox Code Playgroud)

所以它$var包含:This <b>is</b> an example.

所以基本上我有两个问题:

  1. 如何删除spans
  2. 如何将剥离的字符串保存到变量

lon*_*day 5

像这样的东西应该做的伎俩:

<?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"
Run Code Online (Sandbox Code Playgroud)