2012-04-23 7 views
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 - "!" 

上記のコードおよび出力から、私たちはどの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"; 

私は2つの質問があります:

  1. この動作は、nodeValueタグを引き剥がしたり、私が想像することができる他の種類のものを将来作成することができます。隠された驚きはありますか?
  2. strip_tags()をタグを削除するのと異なるタグを削除するのに、nodeValueをどのように使用していますか?

答えて

0

タグを削除するだけの場合、whayは複雑ですか?私はそれが速いと思う、とstrip_tags()関数を使用する方が良いです。また、取り除かれるべきでないタグを指定するために、2番目のパラメータを取ることができます。

+0

あなたは 'strip_tags()'を使う方が速くて良いと主張をバックアップするソースがありますか?また、私の最初の質問に対する答え、つまり、私が頼りに説明した 'nodeValue'の振る舞いを知ることができますか? –