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 :

[PHP 5.0] Récupérer les valeurs de certains attributs de balises


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Par défaut [PHP 5.0] Récupérer les valeurs de certains attributs de balises
    Bonjour,

    Il existe plusieurs topics proches et j'ai essayé d'adapter les solutions proposées au cas que j'ai à traiter, malheusement sans succès. Les expressions, j'ai encore du mal !

    Je désire récupérer les valeurs de certains attributs de certaines balises html.

    1- Les balises peuvent changer en fonction de l'utilisation
    2- Les attributs peuvent changer en fonction de l'utilisation
    3- Le plus grand nombre de syntaxes possibles est à considérer (espaces, quote, pas quote, etc)

    exemple :
    on désire les valeurs des attibuts alt et src de la balise img
    <img src="toto.png" title ='photo de toto' alt="toto" />
    <img title='photo de toto' src = "toto.png" alt="toto" />
    etc ... toutes les syntaxes possibles, y compris si un des attributs demandés n'est pas présent

    Ici, je voudrais avoir un tableau
    tab['img'] = array (
    'src' => 'toto.png',
    'alt' => 'toto' );

    Pour l'heure, je suis arrivé à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $pattern = '#<'.$tag.'[^>]*'.$attribut.'[ ]*=["\']?([^"\'> ]*)["\']?[^>]*>#is';
    if ( preg_match_all( $pattern, $ch, $matches ) )
    {
        print_r( $matches[0] );
    }
    Mais j'obtiens l'intégralité de la balise ! <img src="toto.png" title ='photo de toto' alt="toto" /> deux fois et non les valeurs de mes deux attributs.
    J'ai pas réussi à faire mieux ...

    Une idée ?
    Merci

  2. #2
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Bonjour,

    Je ferais ça en plusieurs étapes :
    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
    $str = <<< END
    <img src="imag1.png" title ='photo de toto' alt="tot1" />
    <img title='photo de toto' src = "image2.png" alt="toto2" />
    <img src=imag3.gif title='photo de toto' alt='toto3' />
    END;
     
    $tag = 'img';
    $att = 'src|alt';
     
    if (preg_match_all('/<'.$tag.'[^>]*>/', $str, $m)) {
        $result = array();
        foreach($m[0] as $balise) {
            $buffer = array();
            $reg = sprintf('/(%s) \s* = \s* (["\']?) ([^">\s]*) \2/ix', $att);
            if (preg_match_all($reg, $balise, $n)) {
                foreach($n[0] as $key=>$value) {
                    $buffer[ $n[1][$key] ] = $n[3][$key];
                }
            }
            $result[$tag][] = $buffer;
        }
        print_r($result);
    }
    Attention : il peut y avoir des espaces dans un alt, ce qui ne sera pas pris en compte dans la présente expression.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Par défaut
    Merci

    Cela fonctionne bien en traitant $balise avec un stripslashes.


    Cependant, pourquoi ne pas prendre les espaces dans la troisième parenthèses capturantes ?

    Citation Envoyé par s.n.a.f.u
    $reg = sprintf('/(%s) \s* = \s* (["\']?) ([^">\s]*) \2/ix', $att);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $reg = sprintf('/(%s) \s* = \s* (["\']?) ([^">]*) \2/ix', $att);
    Quels cas ne seraient pas prévus si j'agis ainsi ? Car là, j'ai également mes valeurs avec espaces

Discussions similaires

  1. DBGrid récupérer les valeurs de l'enregistrement courant
    Par bob_sapp dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/09/2014, 07h56
  2. [POO] Récupérer les valeurs d'un objet en PHP
    Par latristef01 dans le forum Langage
    Réponses: 3
    Dernier message: 12/09/2008, 16h11
  3. Réponses: 11
    Dernier message: 26/04/2007, 10h40
  4. [PHP-JS] Récupérer les valeurs des checkbox
    Par jamirokoi dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2006, 16h24
  5. [Couleur] Récupérer les valeurs R,V,B et L,U,V ?
    Par M4v3rick dans le forum C++Builder
    Réponses: 4
    Dernier message: 25/01/2004, 03h28

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