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 :

Retrouver les liens relatifs [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut Retrouver les liens relatifs
    Bonjour,

    Je cherche un moyen de récupérer tous les liens relatifs dans une page. J'ai fait une regex mais elle ne semble pas fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eregi('href="/[a-zA-Z0-9_]*/"', $file, $links);
    Je cherche à récupérer tous les liens de type relatifs dans un tableau mais je suis un peu paumé là. eregi est-elle la bonne fonction ? La regex est-elle correcte ?

    Merci.

  2. #2
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    dans un tableau :
    1 - commencer par parcourir les différentes occurences du tableau
    2 - vérifier l'existence de href="http:// dans les liens, suite à quoi on peut dire que ces liens sont absolus
    3 - tous les autres liens sont relatifs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $relative_links[0] = "";
    for($i=0;$i<count($links);$i++;)
         {
         if(!eregi('href="http://',$links[$i])
                 {
                  $relative_links[$i] = $links[$i];
                 }        
         }
    En gros à partir du moment ou dans ta balise a tu n'as pas http:// c'est que le lien pointe vers une url relative.

  3. #3
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Je n'ai pas de tableau avec les liens, je n'ai que le code de la page. Ile me faut d'abord récupérer ces liens. Je pensais pouvoir récupérer directement tous les liens relatifs avec une regex. Il me semble qu'avec une fonction comme eregi, je peux trouver tous ces liens puis les récupérer dans un tableau. C'est à ça qu'elle sert non ? De plus, j'ai quelques problèmes pour former cette regex.

    Merci.

  4. #4
    Membre confirmé
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Points : 518
    Points
    518
    Par défaut
    Salut,

    Je suppose que tu as déjà le code pour récupérer le code d'une page ?
    En d'autre terme, as-tu le flux html à parser ?
    Zend PHP5 Certification
    MySQL 4 Core Certification

  5. #5
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    oui j'ai utilisé file_get_contents, pas de problème de ce côté

  6. #6
    Membre confirmé
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Points : 518
    Points
    518
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $subject = file_get_contents($file);
     
    $pattern = '`href="([^#]*?)(?<!http)"`i';
     
     $arRelativeLinks = array();
    preg_match_all($pattern, $subject, $matches);
    {
    	foreach($matches[1] as $link)
    	 $arRelativeLinks[] = $link;
    }
    ps : j'ai exclu les liens de type href="#"
    Zend PHP5 Certification
    MySQL 4 Core Certification

  7. #7
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Parfait merci

    Ton code est bon, tu devrais le proposer pour les sources de regex

    Si tu es d'accord, c'est là que ça se passe

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/05/2012, 14h26
  2. afficher les données relatifs a un lien hypertexte
    Par manu404 dans le forum Java EE
    Réponses: 0
    Dernier message: 20/11/2011, 18h13
  3. [AJAX] XMLHttpRequest et les liens relatifs
    Par Loenix dans le forum AJAX
    Réponses: 4
    Dernier message: 21/10/2011, 10h38
  4. problème avec les liens relatifs
    Par Balbuzard dans le forum Langage
    Réponses: 2
    Dernier message: 15/02/2009, 15h04
  5. retrouver les compsants FASTNET sous Delphi 7
    Par fandor7 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/06/2003, 18h11

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