Inserer des valeur dans une URL

Résolu
mariostar27 Messages postés 442 Statut Membre -  
mariostar27 Messages postés 442 Statut Membre -
Bonjour.

Le titre n'est pas très explicite mais voici mon problème :

J'ai une URL comme ceci :

blog/categorie/([a-z0-9\-_]+)/page/([0-9]+)

J'ai un tableau comme ceci :

array('jeux', 2)

l'idée est de récupérer une URL en remplaçant les expressions par les valeurs du tableau, tout en vérifiant que celle-ci sont conforme à l'expression régulière. Ici, je devrait obtenir une URL comme ceci :

blog/categorie/jeux/page/2

Je n'ai aucune idée de comment faire ceci. Par avant merci.

--
gwennael

2 réponses

  1. loupix57 Messages postés 316 Date d'inscription   Statut Membre Dernière intervention   14
     
    Bonjour mario !

    espérant que ceci vas t'aider

    $tabl = Array("jeux",2);
    
    $url_a_verifier = "blog/categorie/".$tabl[0]."/page/".$tabl[1]; 
    
    
    // vérification avec l'expression réguliére
    
    if(ereg('blog/categorie/([a-z0-9\-_]+)/page/([0-9]+) ', $url_a_verifier){
    echo "url valide";}
    else{echo "url invalide";}
    


    Même les maths ça n'a rien de compliquer.
    0
  2. mariostar27 Messages postés 442 Statut Membre 26
     
    Non.

    Dans ton message, tu as :

    $url_a_verifier = "blog/categorie/".$tabl[0]."/page/".$tabl[1]; 


    hors, j'ai une url comme ceci :

    blog/categorie/([a-z0-9\-_]+)/page/([0-9]+) 


    Comment sais tu que tu doit modifier au bon endroit ???

    En revanche, j'ai eu une réponse sur un autre site :

    $url = "blog/categorie/([a-z0-9\-_]+)/page/([a-z0-9\-_]+)";
     
    function getLink($subject, $elements)
    {
        preg_match_all("#\((.*?)\)#", $subject, $match);
     
        if (isset($match[1]) && count($elements) == count($match[1]))
        {
            $callback = function($value) { return "#" . preg_quote($value) . "#"; };
     
            $search = array_map($callback, $match[0]);
     
            $link = preg_replace($search, $elements, $subject, 1);
     
            return preg_match('#^' . $subject . '$#', $link) ? $link : null;
        }
        return null;
    }
     
    echo getLink($url, array('jeux', '1'));
    


    Ça fonctionne nickel.
    0