0
<?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);
?>
出力:strippingタグのnodeValueプロパティの信頼性はどれくらいですか?strip_tags()との比較はどうですか?
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 - "!"
上記のコードおよび出力から、私たちはどのDOMNode
のnodeValue
プロパティにアクセスするときに我々が剥ぎ取らすべてのタグとその内側の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";
私は2つの質問があります:
- この動作は、
nodeValue
タグを引き剥がしたり、私が想像することができる他の種類のものを将来作成することができます。隠された驚きはありますか? strip_tags()
をタグを削除するのと異なるタグを削除するのに、nodeValue
をどのように使用していますか?
あなたは 'strip_tags()'を使う方が速くて良いと主張をバックアップするソースがありますか?また、私の最初の質問に対する答え、つまり、私が頼りに説明した 'nodeValue'の振る舞いを知ることができますか? –