Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
701 views
in Technique[技术] by (71.8m points)

php - 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->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

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
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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"

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...