Récupérer le contenu des alt d'une page ???

WRInaute discret
Bonjour,je cherche un script php qui ecrit dans un tableau ou un fichier txt le contenu des alt="...." d'un fichier php ???
ça existe???
Merci.
 
WRInaute passionné
Code:
<?php
// Le bout de code HTML à parser
// Il peut venir d'un fichier en local ou d'un GET sur Internet ou autre
// bad html string
$html = <<< HTML
<head>
<title>Test Tidy</title>
</head>
<body>
<H1>Get the alt atribute of an html page</H1>
<p class="bar">paragraphe</p>
<img src="" alt="image 1" />
<img src="" alt="image 2" />
<br/>
<div id="tidy" class="foo">
	<img src="" alt="image3" />
<div>
</body>
</html>
<html lang="fr">
HTML;
// Fin du bout de code HTML
// le HTML est faux => balise <html> en fin de fichier
// => réparé automatiquement par tidy


// Instance d'un nouvel objet tidy
$tidy = tidy_parse_string($html);

// tidy répare le code HTML
tidy_clean_repair( $tidy ) ;

// well formed html
// sortie HTML pour voir le code HTML réparé
echo $tidy ;

// Récupére la racine de l'arbre html : $tidy->root()
// getAlt Est une fct recursive qui permet de parcourir tout l'arbre
getAlt($tidy->root());

function getAlt($node) {

 // Est-ce que le noeud courant a des fils ?  
 if($node->hasChildren()) {
       // Pour chacun des fils du noeud courant
        foreach($node->child as $child) {
            
            // Traitment avec chacun des attributs ( là c peut-être un peu faux) => ici tu fait ce que tu veux.
             foreach ($child->attribute as $attribut ) {
       		 if ( isset( $child->attribute["alt"] ) ) {
       		 	 echo $attribut . "<br />"  ;
       		 }        	
           }
          // Appel récursif de la fonction
           getAlt($child);
       }
   }
}
?>

Il existe bien sûr des méthodes plus simple à base de regexp.
Je préfère des outils qui parsent le code HTML (tidy, par exemple), ils sont plus souple et plus puissant. Il faut adapter le code.

Il y a une fct spécifique pour les attributs :
http://fr2.php.net/manual/fr/function.t ... t-attr.php, elle a pas marché chez moi.
 
WRInaute discret
Merci beaucoup pour l'info j'avais cherché sur le web et j'avais rien vu...
là je vais essayer de piger le code...plus les infos du site.
Un grand merci.. :wink:
 
WRInaute discret
Merci,ce que je comprenais pas :
$html = <<< HTML ce que ça veux dire
<html lang="fr">
HTML;
j'avais jamais vu cette syntaxe...
Fonction récursive getAlt($tidy->root()) c'est un algo que je connaissais pas...
Je fais des tests pour voir le resultat.
il me marque erreur pour :
$tidy = tidy_parse_string($html);
peut-être c'est une fonction trop récente pour ma version php ?
 
WRInaute passionné
DecibelMan a dit:
Merci,ce que je comprenais pas c'est pourquoi la balise html :
$html = <<< HTML ce que ça veux dire
<html lang="fr">
HTML;
heredoc syntax. ça te permet d'écrire rapidement dans une variable.
Il est évident que toi tu vas ouvrir un fichier, ou récupérer le contenu différemment.

DecibelMan a dit:
Fonction récursive getAlt($tidy->root()) c'est un algo que je connaissais pas..

La récursivité est un moyen de simplifier ( ou des fois de compliquer :D ) des algos.
Pour traiter un arbre HTML la récursivité est à ma connaisance un des moyens le plus simple.

DecibelMan a dit:
Je fais des tests pour voir le resultat.
il me marque erreur pour :
$tidy = tidy_parse_string($html);
peut-être c'est une fonction trop récente pour ma version php ?

http://fr2.php.net/manual/fr/ref.tidy.php
PHP > 4.3.x

par contre il faut que tidy soit installé sur ton serveur et que PHP soit compilé avec le support de tidy.

si ça ne marche pas il faut que tu passes par des regexp.
Là, ça fait trop longtemps que je n'ai pas pratiqué pour pouvoir t'aider. La regexp doit être assez simple quand même
 
WRInaute discret
Oui sympa,
j'avais pensé aux expressions régulières au départ mais j'avais pas le bon début donc je cherchais une autre fonction.
j'ai regardé regexp et je crois avoir trouvé là une façon de faire...
C'est pas si facile je vais bosser...:)

le truc c'est que dans mes pages a scanner je vais faire un include et récupérer les valeurs dans un tableau que je vais afficher...ensuite....
 
Discussions similaires
Haut