【问题标题】:How reliable is the nodeValue property for stripping tags and how does it compare against strip_tags()?剥离标签的 nodeValue 属性有多可靠,它与 strip_tags() 相比如何?
【发布时间】:2012-04-24 01:03:12
【问题描述】:
<?php
function walkDOM($node)
{
    if (! isset($node->childNodes))
        return;

    for ($i = 0; $i < $node->childNodes->length; $i++) {

        $childNode = $node->childNodes->item($i);
        $childNodeName = $childNode->nodeName;

        echo $childNode->nodeName . " - " . $childNode->nodeType . 
             " - \"" . $childNode->nodeValue . "\"\n";
        walkDOM($childNode);
    }
}

function processHTML($s)
{
    $doc = new DOMDocument('1.0', 'UTF-8');
    $success = $doc->loadHTML($s);
    if (! $success) {
        echo "Load HTML failed.\n";
        exit(1);
    }
    echo "Loaded HTML: " . $doc->saveHTML() . "\n";
    walkDOM($doc);
}

$s = '<div>hello, <p>world<big>!</big></p></div>';
processHTML($s);
?>

输出:

Loaded HTML: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><div>hello, <p>world<big>!</big></p></div></body></html>

html - 10 - ""
html - 1 - "hello, world!"
body - 1 - "hello, world!"
div - 1 - "hello, world!"
#text - 3 - "hello, "
p - 1 - "world!"
#text - 3 - "world"
big - 1 - "!"
#text - 3 - "!"

从上面的代码和输出中,我们可以看到,当我们访问任何DOMNodenodeValue 属性时,我们会得到它的内部HTML,其中所有标签都被剥离了。我可以使用它来过滤掉所有标签,如下所示:

$s = '<div>hello, <p>world<big>!</big></p></div>';
$doc = new DOMDocument('1.0', 'UTF-8');
$doc->loadHTML($s);
echo $doc->childNodes->item(1)->nodeValue . "\n";

输出:

hello, world!

但我也可以使用strip_tags 来做到这一点:

$s = '<div>hello, <p>world<big>!</big></p></div>';
echo strip_tags($s) . "\n";

我有两个问题:

  1. 以后我能否依靠nodeValue 属性的这种行为来剥离标签或做任何其他我能想象到的事情。有什么隐藏的惊喜吗?
  2. 使用nodeValue 剥离标签与使用strip_tags() 剥离标签有何不同?

【问题讨论】:

    标签: php html dom


    【解决方案1】:

    如果你只是想去掉标签,有什么复杂的?我认为使用 strip_tags() 函数更快,更好。此外,它可以采用第二个参数来指定不应剥离的标签。

    【讨论】:

    • 您是否有任何来源支持您声称使用strip_tags() 更快更好的说法?另外,您知道我第一个问题的答案吗,即我解释过的nodeValue 的行为可以依赖吗?
    猜你喜欢
    • 2013-07-11
    • 2011-06-27
    • 2011-12-13
    • 2011-09-11
    • 2014-04-17
    • 2014-09-22
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    相关资源
    最近更新 更多