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 :

Parsing complexe de code HTML


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 68
    Par défaut Parsing complexe de code HTML
    Salut,

    Voila je ne cherche pas une solution toute faite, a moins vraiment que qqun en ai une lol, mais de l'aide serais déjà très bien.

    Mon objectif :

    J'enregistre une page web localement sur le server, pour l'ouvrir et ainsi pouvoir parser le code html.

    Je dois en faite localiser les liens <a ...>...</a> sur la page, ensuite pour chaqu'un d'eux examiner le href="..." et si celui ci est un lien vers un fichier avec l'extention .zip/.rar, alors je doit obtenir ce qui se trouve entre le <a> et le </a> (le texte linker en qq sorte).

    Exemple, si dans le code HTML de la page il y a :
    <a href="map/france.zip">Blabla</a>

    Alors mon script devra me renvoyer "Blabla".

    Voila, étant donné que je n'ai jamais fait qq chose se rapprochant de ca, je suis un peu perdu, je ne sais pas trop bien comment m'y prendre pour analyser les code html, quelles fonctions sont a ma dispositions, lesquelles seraient les plus adaptées, ..

    Merci beaucoup si qqun peut m'aider.

    PS : Peut-être qu'il y a une librairie PHP gratuite permettant de faire ca ?

  2. #2
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Pour donner une piste je te propose ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <textarea rows="25" cols="80"><?php
     
     
    $ma_chaine = <<<EOS
    Ceci est une chaine comportant <a href="http://example.com" alt="zip">des liens</a> 
    et <a href="fichier.zip">seulement</a> des liens. <A href="fichier.tar">Ok ?</A>
    EOS;
     
    preg_match_all('`<a\s.*href=["\'](.*)["\'].*>(.*)</a>`i', $ma_chaine, $matches);
    var_dump($matches);
     
    ?>
    Attention, ce code ne marche pas, l'expression regulière est foireuse. Néanmoins en la corrigeant tu devrais pouvoir t'en sortir... Je suis une quiche en regexp alors je ne peux pas faire plus dans l'immédiat.
    En attendant, tu peux te documenter sur http://www.expreg.com/

  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Voici une piste plus complète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?
     
    $string = '<a href="truc_1.rar">truc 1</a> <a href="truc_2.jpg">truc 2</a> <a href="truc_3.zip">truc 3</a>';
     
    preg_match_all('#<a href="[^"]+\.(?:zip|rar)">(.+)</a>#Ui', $string, $matches);
     
    echo '<pre>';
    print_r($matches);
    echo '<pre>';
     
    ?>
    Je suis parti du principe que tu as des liens correctement formés. Si ce n'est pas le cas, alors il faudra revoir la regex.
    Dans cet exemple, tu auras tous tes liens dans $matches[1].

  4. #4
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Merci Kirkis, grâce à l'option U, ma regexp marche nettement mieux !
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <textarea rows="25" cols="80"><?php
     
     
    $ma_chaine = <<<EOS
    Ceci est une chaine comportant <a href="http://example.com" title="zip">des liens</a> 
    et <a href="fichier.zip">seulement</a> des liens. <A href="fichier.tar">Ok ?</A>
    EOS;
     
    preg_match_all('`<a\s.*href=["\'](.*)["\'].*>(.*)</a>`Ui', $ma_chaine, $matches);
    var_dump($matches);
     
    ?>
    ----------------------
    array(3) {
      [0]=>
      array(3) {
        [0]=>
        string(52) "<a href="http://example.com" alt="zip">des liens</a>"
        [1]=>
        string(55) "<a title="fichier zip" href="fichier.zip">seulement</a>"
        [2]=>
        string(30) "<A href="fichier.tar">Ok ?</A>"
      }
      [1]=>
      array(3) {
        [0]=>
        string(18) "http://example.com"
        [1]=>
        string(11) "fichier.zip"
        [2]=>
        string(11) "fichier.tar"
      }
      [2]=>
      array(3) {
        [0]=>
        string(9) "des liens"
        [1]=>
        string(9) "seulement"
        [2]=>
        string(4) "Ok ?"
      }
    }

    Par contre ce que je reproche avec la tienne c'est qu'il y ait obligatoirement "<a href", nombre d'espace fixe, pas de possibilité d'avoir un attribut entre l'element a et href (Faut bien trouver quelque chose et défendre sa propre solution )

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Pfff, y'a toujours moyen de chipoter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #<a.*href="[^"]+\.(?:zip|rar)"[^>]*>(.+)</a>#Ui

Discussions similaires

  1. Parsing de code HTML
    Par katcha95 dans le forum Bibliothèque standard
    Réponses: 0
    Dernier message: 25/10/2009, 15h49
  2. Problème d'exécution de code HTML (parse error)
    Par dimitri13 dans le forum Langage
    Réponses: 6
    Dernier message: 30/09/2009, 16h53
  3. Parse code HTML avec PHP
    Par naourass dans le forum Langage
    Réponses: 3
    Dernier message: 19/05/2006, 08h12
  4. Générer du code HTML
    Par patpst dans le forum C++Builder
    Réponses: 4
    Dernier message: 27/11/2002, 10h27
  5. composant builder4 pour afficher du code html
    Par BranRuz dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/09/2002, 11h35

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