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 :

extraire l'id d'une url


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 50
    Points : 29
    Points
    29
    Par défaut extraire l'id d'une url
    Bonjour tout le monde,

    j'ai un petit problème pour extraire l'id (juste avant "-1.html) de plusieurs url de type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    http://www.domaine.com/keyword1-keyword2-keyword3-id-1.html
    
    http://www.domaine.com/keyword1-keyword2-id-1.html
    
    http://www.domaine.com/keyword1-id-1.html

    Pour l'instant j'ai trouvé cette fonction :

    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
     
        function extract_unit($string, $start, $end)
        {
        $pos = stripos($string, $start);
     
        $str = substr($string, $pos);
     
        $str_two = substr($str, strlen($start));
     
        $second_pos = stripos($str_two, $end);
     
        $str_three = substr($str_two, 0, $second_pos);
     
        $unit = trim($str_three); // remove whitespaces
     
        return $unit;
        }
     
        $text = 'http://www.domaine.com/keyword1-keyword2-keyword3-id-1.html';
        $text2 = 'http://www.domaine.com/keyword1-keyword2-id-1.html';
        $text3 = 'http://www.domaine.com/keyword1-id-1.html';
     
        $unit1 = extract_unit($text, '-', '-1.html)');
        $unit2 = extract_unit($text2, '-', '-1.html)');
        $unit3 = extract_unit($text3, '-', '-1.html)');
    Mais comme vous l'avez peut être déjà deveniné, au lieu d'avoir uniquement l'ID, cela me donne ces résultats :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $unit1 = keyword2-keyword3-id
     
    $unit2 = keyword2-id
     
    $unit3 = id ( le seul qui marche puisqu'il n'y a qu'un seul tiret avant l'id)
    La seule constante dans l'url est la fin : -1.html , car avant l'ID, il peut y avoir plusieurs tirets. Du coup, je ne vois pas comment extraire cet ID !

    Est-ce que quelqu'un aurait la gentillesse de m'aider ?

    Merci beaucoup !

  2. #2
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Une petite regexp comme ceci fera l'affaire :

    tu n'as plus qu'à l'utiliser avec "preg_match" et le tour est joué.

  3. #3
    Membre confirmé Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Points : 576
    Points
    576
    Par défaut
    salut,
    si tu sais que ton id est en avant dernier ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    $TabUrl=explode("-",$Url);
    $LgMax=sizeof($TabUrl);
     
    $Id=$TabUrl[$LgMax-1];

  4. #4
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 50
    Points : 29
    Points
    29
    Par défaut
    SAlut,

    génial merci pour vos réponses.

    François, j'ai fait ça :
    $regex = "/^.*-(.*?)-1\.html$/";
    $id = preg_match($regex, $url);

    mais $id retourne 0 (si je vire les / dans le regex, il me dit que la chaine avec ^est mal fermée.


    Guigo : merci à toi aussi, ta solution marche parfaitement , j'ai juste changé le -1 par -2 (le -1 donnait la fin de l'url : 1.html). Le -2 me donne bien l'ID.

    Passez un bon week end, et encore merci de votre aide !

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Salut a tous,
    Le preg_match il s'utilise pas comme ca !

    Francois pk y'a le (.*?) dans ce cas la ? tu ma expliquer sur une de mes autres questions (le no-grebby) et la dans se cas je vois pas a quoi il sert, ca marche aussi sans.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	$s_str = 'http://www.domaine.com/keyword1-id-1.html';
    	preg_match('#.*-(.*)-#', $s_str, $a_array);
    	print "<pre>";print_r($a_array);print "</pre>";
    Merci pour la réponse

  6. #6
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Oui exact le ungreedy n'est pas nécessaire dans ce cas ci.

    L'erreur est humaine, le pardon est divin

  7. #7
    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 : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Il y a effectivement plusieurs façons, et dans ce cas les regex ne sont pas la plus appropriée.
    Faisons un petit bench :

    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
    <?php
     
    $str = 'http://www.domaine.com/keyword1-keyword2-keyword3-id-1.html';
     
    print ("snaf1 = ".snaf1($str)."\n");
    print ("snaf2 = ".snaf2($str)."\n");
     
    for ($i=1; $i<=5; $i++) {
        print ("chrono snaf1 = ".chrono('snaf1')."\n");
        print ("chrono snaf2 = ".chrono('snaf2')."\n");
        print ("\n");
    }
     
     
     
    function snaf1($str) {
        $tab = array_reverse(explode("-", $str));
        return $tab[1];
    }
     
    function snaf2($str) {
        $reg = '/([^-]+)-1.html$/';
        preg_match($reg, $str, $m);
        return $m[1];
    }
     
    function chrono($func) {
        global $str;
        $start = microtime(true);
        for ($i=1; $i<5000; $i++)
            $func($str);
        $end = microtime(true);
        return $end - $start;
    }

Discussions similaires

  1. Extraire données à partir d'une url
    Par vinserm dans le forum R
    Réponses: 4
    Dernier message: 25/03/2015, 16h51
  2. Extraire un élément d'une url
    Par thibaud74 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 18/02/2010, 10h28
  3. Réponses: 4
    Dernier message: 09/01/2008, 00h36
  4. [RegEx] Expression reguliere extraire un param d une URL
    Par venomelektro dans le forum Langage
    Réponses: 3
    Dernier message: 18/10/2005, 17h28
  5. [RegEx] [Script]Extraire une url
    Par Hell dans le forum Langage
    Réponses: 9
    Dernier message: 17/10/2004, 15h11

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