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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    Par défaut Récupérer les balises img ayant un attribut égal à X parmi X attributs
    Bonjour,

    Je viens poster très rarement car généralement je n'ai pas de soucis avec les Regex. Aujourd'hui je dois être fatigué car une Regex qui me paraissait toute simple est en train de m'agacer depuis 2 heures. J'ai mon café à côté donc ca peut encore aller... :p

    Voici le contexte:
    J'ai du code HTML avec plein de balises dont plusieurs balises img.
    Parmi toutes les balises img de mon code, il y en a qui possède un src égale à "image/miniature/laphoto.jpg" avec d'autres attributs pouvant varier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <img src="image/miniature/laphoto.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' />
    J'aimerai pouvoir récupérer dans un tableau toutes les balises img ayant la valeur src égale à "image/miniature/laphoto.jpg".

    Ce qui me pose problème c'est le fait que le nombre d'attribut à l'intérieur des balises images en question peuvent toutes changer (sauf l'attribut src évidement).

    Une idée pour que je n'entame pas mon 3ème café ? :p

    Merci d'avance, je reste sur le forum pour toutes questions.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    comme d'hab : pour parser du HTML c'est DOMDocument

  3. #3
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Allez sans trop réfléchir je propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
    $a = <<<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';
    preg_match_all('#(<img.*src="'.$src.'".*/>)#im', $a, $matches);
     
    print_r($matches[0]);
    ?>

  4. #4
    Membre confirmé
    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
    Par défaut
    Merci pour cette réponse !!

    Cela dit j'ai tout mes résultat dans la meme cellule de tableau à savoir matches[0][0].
    Je crois même que s'il y a du texte entre deux balises images contenant le bon SRC et bien il me récupére les deux balises plus le texte au milieu...ce que je ne souhaite pas.

    Est il possible de mettre chaque résultat dans une cellule différente du tableau matches[] ? et de ne pas prendr ele texte présent entre les deux balises ?

    Merci beaucoup. Après ceci j'aurai enfin fini

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    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 +
    comme d'hab : pour parser du HTML c'est DOMDocument
    et dans ton cas DOMXPath sera le plus adapté.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre confirmé
    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
    Par défaut
    Je comprends bien

    Mais je ne sais pas du tout utiliser xpath.

    En réalité je ne vois pas comment formuler ma requete qui me semble compliqué pour le débutant que je suis en xpath (j'ai du utiliser ca une fois juste pour parcourir une balise, rien de plus)...

    Mais sinon je comprends bien qu'une regex est "stupide"...

    Peux tu m'aider à résoudre mon probleme ?

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    le langage xpath est plus naturel que les regex

    pas dur :
    //img[@src="image/miniature/laphoto.jpg"]

  8. #8
    Membre confirmé
    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
    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.

  9. #9
    Membre confirmé
    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
    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.

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