簡體   English   中英

計算PHP頁面中的所有HTML標記

[英]Count all HTML tags in page PHP

我花時間在正則表達式來解決這個問題,但沒有結果我嘗試使用PHP 5.3解決這個問題的信息 - 在頁面中重復多少次和頁面中所有標簽的信息。

遺憾的是,你的問題在目前的形式中幾乎無法理解。 請嘗試更新它並更具體。 如果要計算頁面中的所有HTML標記 ,可以執行以下操作:

$HTML = <<< HTML
<html>
    <head>
        <title>Some Text</title>
    </head>
    <body>
        <p>Hello World<br/>
            <img src="earth.jpg" alt="picture of earth from space"/>
        <p>
        <p>Counting Elements is easy with DOM</p>
    </body>
</html>
HTML;

使用DOM計算所有DOMElements:

$dom = new DOMDocument;
$dom->loadHTML($HTML);
$allElements = $dom->getElementsByTagName('*');
echo $allElements->length;

以上將輸出8 ,因為DOM中有八個元素。 如果您還需要知道元素的分布 ,您可以這樣做

$elementDistribution = array();
foreach($allElements as $element) {
    if(array_key_exists($element->tagName, $elementDistribution)) {
        $elementDistribution[$element->tagName] += 1;
    } else {
        $elementDistribution[$element->tagName] = 1;
    }
}
print_r($elementDistribution);

這會回來

Array (
    [html] => 1
    [head] => 1
    [title] => 1
    [body] => 1
    [p] => 2
    [br] => 1
    [img] => 1
)

請注意,getElementsByTagName僅返回DOMElements 它沒有考慮結束標記,也沒有返回其他DOMNode。 如果還需要計算結束標記和其他節點類型,請考慮使用XMLReader

$testHTML = file_get_contents('index.html');

$search = preg_match_all('/<([^\/!][a-z1-9]*)/i',$testHTML,$matches);

echo '<pre>';
var_dump($matches[1]);
echo '</pre>';

為您提供所有標簽的數組。 一旦數據在數組中,你就可以使用所有標准的PHP數組函數 - 例如array_count_values() - 來提取你想要的細節......盡管你並沒有真正說出你想要的關於html標簽的信息

使用array_count_values()和preg_match_all()的結果:

echo '<pre>';
var_dump(array_count_values($matches[1]));
echo '</pre>';

array(5) {
  ["html"]=>
  int(1)
  ["head"]=>
  int(1)
  ["title"]=>
  int(1)
  ["body"]=>
  int(1)
  ["h1"]=>
  int(2)
}

這是你想要的嗎?

我建議你結賬simple html dom

http://simplehtmldom.sourceforge.net/manual.htm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM