计算PHP页面中的所有HTML标记

Ale*_*ndr 2 html php regex

我花时间在正则表达式来解决这个问题,但没有结果我尝试使用PHP 5.3解决这个问题的信息 - 在页面中重复多少次和页面中所有标签的信息.

Gor*_*don 18

遗憾的是,你的问题在目前的形式中几乎无法理解.请尝试更新它并更具体.如果要计算页面中的所有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;
Run Code Online (Sandbox Code Playgroud)

使用DOM计算所有DOMElements:

$dom = new DOMDocument;
$dom->loadHTML($HTML);
$allElements = $dom->getElementsByTagName('*');
echo $allElements->length;
Run Code Online (Sandbox Code Playgroud)

以上将输出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);
Run Code Online (Sandbox Code Playgroud)

这会回来

Array (
    [html] => 1
    [head] => 1
    [title] => 1
    [body] => 1
    [p] => 2
    [br] => 1
    [img] => 1
)
Run Code Online (Sandbox Code Playgroud)

请注意,getElementsByTagName 仅返回DOMElements.它没有考虑结束标记,也没有返回其他DOMNode.如果还需要计算结束标记和其他节点类型,请考虑使用XMLReader.