2010-07-06 6 views
2

J'ai passé du temps sur regex pour résoudre ce problème mais pas de résultat J'essaie de résoudre ce problème en utilisant PHP 5.3 Information like - Combien de fois répète dans la page et des informations sur tous les tags de la page.Compter tous les balises HTML dans la page PHP

+0

s'il vous plaît poster ce que vous avez essayé. Si vous voulez juste un nombre d'éléments de dom, vous obtiendrez probablement un meilleur résultat de javascript, mais php peut le faire en utilisant libxml ... en supposant qu'il est valide xhtml. – Gabriel

+1

Si vous le faites depuis PHP, vous devriez utiliser la classe [DOMDocument] (http://php.net/manual/fr/class.domdocument.php). Voir la réponse de Gordon ici: [str_replace dans certaines balises html seulement] (http://stackoverflow.com/questions/3172493/str-replace-within-certain-html-tags-only) – Mike

+0

J'essaye d'aimer ce problème en utilisant reg exp et substr logique était la prochaine toute la page convertir en 1 chaîne longue trouver balise html et cont tous les autres dans le texte après tout supprimer et compter – Alexandr

Répondre

17

Votre question est malheureusement à peine compréhensible dans sa forme actuelle. S'il vous plaît, essayez de le mettre à jour et d'être plus précis. Si vous voulez compter toutes les balises HTML dans une page, vous pouvez le faire:

$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; 

En comptant tous DOMElements avec DOM:

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

Ce qui précède la sortie 8, parce qu'il ya huit éléments le DOM. Si vous devez également savoir la distribution des éléments, vous pouvez faire

$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); 

Ce retourneraient

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

Notez que getElementsByTagName retourne DOMElements seulement. Il ne prend pas en compte les balises de fermeture et ne renvoie pas d'autres DOMNodes. Si vous devez également compter les balises de fermeture et d'autres types de nœuds, utilisez plutôt XMLReader.

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

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

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

Vous donne un tableau de tous les tags. Une fois que les données sont dans le tableau, vous pouvez utiliser toutes les fonctions de tableau PHP standard - par ex. array_count_values ​​() - pour extraire les détails que vous voulez ... si vous n'êtes pas vraiment dire ce que l'information que vous voulez sur les balises html

En utilisant array_count_values ​​() avec les résultats du preg_match_all():

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

donne

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

Est-ce que vous voulez?

+0

besoin d'information comme div - 5 a - 7 p - 22 Maby DOMDocument est pas la meilleure solution pour cette tâche? – Alexandr

+0

Oui Merci beaucoup c'est ce que j'ai si longtemps tourmenté C'est une excellente réponse Merci beaucoup – Alexandr

Questions connexes