Подсчитать все теги HTML на странице PHP - PullRequest
2 голосов
/ 06 июля 2010

Я потратил время на регулярные выражения, чтобы решить эту проблему, но не дал результата. Я пытаюсь решить эту проблему, используя PHP 5.3. Например: - Сколько раз повторяется на странице и информация обо всех тегах на странице.

Ответы [ 3 ]

17 голосов
/ 06 июля 2010

К сожалению, ваш вопрос едва понятен в его нынешнем виде.Пожалуйста, попробуйте обновить его и быть более конкретным.Если вы хотите подсчитать все теги 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;

Подсчет всех элементов DOME с помощью DOM:

$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 *Только 1019 *Он не учитывает закрывающие теги и не возвращает другие DOMNodes.Если вам также необходимо сосчитать закрывающие теги и другие типы узлов, рассмотрите возможность использования XMLReader .

1 голос
/ 06 июля 2010
<code>$testHTML = file_get_contents('index.html');

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

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

Дает вам массив всех тегов.Как только данные попадают в массив, вы можете использовать все стандартные функции массива PHP - например, array_count_values ​​() - для извлечения нужных вам деталей ... хотя вы на самом деле не говорите, какую информацию хотите получить о тегах html

Использование array_count_values ​​() с результатами preg_match_all ():

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

дает

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

Это то, что вы хотите?

0 голосов
/ 06 июля 2010

Я предлагаю вам оформить заказ simple html dom

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...