IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Récupérer les balises img ayant un attribut égal à X parmi X attributs


Sujet :

Langage PHP

  1. #21
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Points : 40
    Points
    40
    Par défaut
    Bon j'ai fais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $dom = new DomDocument();
    $dom->loadHTML($contenu);
    $listeImg = $dom->getElementsByTagName('img');
    foreach($listeImg as $Img)
    {
    	echo $Img->getAttribute('src'). "<br />";
    }
    J'obtiens tous les SRC des images contenu dans ma variable $contenu. (moi il me faudrait les balises IMG dans leur intégralités avec leurs attributs dans le bon ordre :/)

    Cela dit je ne vois pas comment peut on dire que les regex ne servent à rien étant donné que je ne peux pas formuler une requete du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    preg_match_all('#(<img.*src="'.$src.'".*/>)#im', $a, $matches);
    En effet comme je l'ai dit plus haut je ne saurai jamais combien d'images seront présent dans ma variable $contenu et surtout je ne sais pas si ces images auront un attribut ALT, un attribut STYLE ou alors les deux, ou alors meme un attribut HEIGHT... etc etc.

    Comment DomDocument peut-il formuler ma requete à savoir la fameuse "*" qui signifie qu'il peut y avoir quelque chose avant ou après le SRC ???

    Je suis sceptique mais si je pourrai avoir une reponse sur comment formuler ca ça m'aiderait beaucoup.

    Bonne soirée.

  2. #22
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par ghostfile Voir le message
    Il va me mettre dans matches[0] ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img height='100' src='image/miniature/laphoto.jpg' /> blabla <img alt='laphoto' src='image/miniature/laphoto.jpg' style='width:130px;' />
    Alors que j'aurai voulu avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    matches[0]="<img height='100' src='image/miniature/laphoto.jpg' />"
    matches[1]="<img alt='laphoto' src='image/miniature/laphoto.jpg' style='width:130px;' />"
    Bah chez moi je récupère bien les éléments dans un tableau multidimensionnel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $matches[0][0] = '<img style="width:100px;" src="image/miniature/laphoto.jpg" alt="la photo" />';
    $matches[0][1] = '<img style="border:1px solid;height:50px;" src="image/miniature/laphoto.jpg" alt="la photo" />';

  3. #23
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Comme te l'a conseillé stealth35, DOMDocument est plus approprié pour faire ce que tu souhaites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
     
    $html = <<<SC
    <img src="image/miniature/laphoto2.jpg" alt='la photo' />
    <img style="width:100px;" src="image/miniature/laphoto.jpg" alt="la photo" />
    <img style="border:1px solid;height:50px;" src="image/miniature/laphoto.jpg" alt="la photo" />
    SC;
     
    $src   = 'image/miniature/laphoto.jpg';
    $nodes = array();
     
    $dom = new DomDocument();
    $dom->loadHTML($html);
    $liste = $dom->getElementsByTagName('img');
    foreach($liste as $node) {
       if ($node->getAttribute('src') === $src) {
          $nodes[] = $node;   // on référence le noeud correspondant au critère
       }
    }
     
    //$node est de type DOMNode
    foreach($nodes as $node) {
       // ici tu fais ce que tu veux avec tes noeuds images sélectionnés...
    }
     
    ?>

  4. #24
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Points : 40
    Points
    40
    Par défaut
    Merci beaucoup je vais voir ça de plus près.

    Par contre j'ai revérifié la Regex et ca ne marche pas...
    J'obtiens tous les résultats compris et inclus des deux balises img dans $matches[0][0]

    Bonne nuit.

  5. #25
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Points : 40
    Points
    40
    Par défaut
    Je n'étais pas fou...l'expression régulière était belle et bien incorrecte donc presque parfaite ^^

    Pour pas que la regex prenne le contenu de la premiere balise jusqu'à la dernière trouvée dans la variable $contenu, il fallait changer le flag:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all('#(<img.*src="'.$src.'".*/>)#Ui', $contenu, $matches);
    Merci à vous tous !

    Bonne fin de semaine.

  6. #26
    Membre régulier
    Homme Profil pro
    conception et traitement de documents xhtml
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : conception et traitement de documents xhtml
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Utiliser une regex pour parser un document DOM (ou XML) c'est comme faire une boucle pour faire une addition histoire de pas utiliser l'opérateur +
    Euh, à la petite nuance près que l'opérateur + est nettement plus facile à comprendre et à utiliser.

    Quand il s'agit de retrouver un élément particulier, la recherche par DOM ou Xpath peut en effet être relativement facile.
    Penser un projet complet uniquement en DOM est, me semble-t-il, une autre paire de manches...
    EDIT : A plus forte raison, lorsque le projet a été initialement pensé en regex et que le code html traité est modifié en cours de traitement.

Discussions similaires

  1. [MySQL] Récupérer une balise <img> dans un article depuis une table MySQL
    Par GeDeon35 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 22/09/2011, 15h20
  2. Réponses: 2
    Dernier message: 09/12/2010, 21h03
  3. Comment récupérer les balises enfant ?
    Par souffle56 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 12/08/2010, 22h21
  4. [XML] HTML dns XML -> Récupérer les balises intérprétées comme du XML
    Par dacid dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 16/04/2010, 17h59
  5. Réponses: 4
    Dernier message: 15/06/2006, 23h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo