preg_match toute simple mais blocage...

Discussion dans 'Référencement Google' créé par lambi521, 16 Décembre 2011.

  1. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    Bonjour à tous,

    Pour rediriger mes mauvaises URLs vers mes URLs SEO, j'utilise une fonction preg_match mais je n'arrive pas à la faire fonctionner, si quelqu'un parmis vous peut m'aider :)

    Mes URLs sont de la forme :
    blablabla-blabla-blabla-21_52.html (réécrites)
    index.php?cPath=21_52 (non réécrites)

    Ce que je veux c'est identifier le dernier $category_id du cPath (après je sais redirigé en 301 vers la bonne page)

    J'ai fait ceci :
    Code:
    preg_match("([0-9]{1,3})\_{0}", $_GET['cPath'], $matchs); ou bien
    preg_match("([0-9]{1,3})[^_]", $_GET['cPath'], $matchs)
    Pour trouver le dernier nombre composé de 1, 2 ou 3 chiffres dans le cPath. Et pour être sûr que c'est le dernier, j'ai testé qu'il n'y ai pas de "_" après ce chiffre, mais ça ne marche pas. Dans cet exemple je voudrais que ça me retourne "52". Il y a surement un meilleur moyen ?
     
  2. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 190
    J'aime reçus:
    1
    je comprend pas bien pourquoi le preg_match.

    Ta variable $_GET['cPath'] contient quoi et tu veux obtenir quoi ?
     
  3. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 190
    J'aime reçus:
    1
    $nombre = ereg_replace("^.*_","",$_GET['cPath']);
     
  4. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    Merci pour la réponse !

    Ma variable cPath contient le chemin de la catégorie courante, par exemple :
    catégorie_souscatégories_sousouscatégories = 21_52_103

    Moi je veux récupérer l'id de la catégorie la plus loin dans le cPath, celle vers laquelle on veut se diriger en fait. Par exemple là ça doit me retourner "103". Le problème c'est que dans mon URL si on tape un "faux" cPath, par exemple 12000_99999_103, le site affiche tout de même la catégorie 103, ce qui fait qu'il y a DC puisque plusieurs URLs !

    Une fois l'id de la categ courante identifié dans le cPath, je reconstruit celui-ci comme il faut pour redirigé en 301 vers la bonne URL.

    Peut-tu expliquer ta fonction ?
     
  5. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 190
    J'aime reçus:
    1
    ereg_replace effectue un remplacement dans une variable par une expression de substitution via un regex.

    * le regex est ici ^.*_ Litéralement c'est : depuis le début de la chaine de caractére (^), tout ce que tu trouve (.*) avant d'atteindre le caractère souligné (_)
    * l'expression de substitution est une chaine vide ""
    * et la variable sur laquelle ça agi est ta GET

    donc au final dans l'exemple tu devrais récupérer le dernier chiffre dans $nombre.

    ça c'est un autre souci.

    pour que tu valide ou pas l'action il faut effectivement faire un preg match du genre :

    preg_match("|[0-9]{1,3}_[0-9]{1,3}_[0-9]{1,3}$|", $_GET['cPath'], $matchs)

    devrait être true si c'est ton url foireuse.
     
  6. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    Si je comprend bien ton explication, la fonction s'arrête au "_" sauf que si mon URL est aaaaaaaaaaaaaaa-21_52_103.html, il va s'arrêter au 1er "_" et me retourner 52_103, ça n'est pas ce que je veux.

    Par ailleurs j'aimerais utiliser preg_match, ma proposition dans mon 1er post doit fonctionner si quelqu'un sait comment dire "sans underscore derrière" en langage expression régulière

    Une fois que j'ai réussi à récupérer la dernier id du cPath c'est bon, je sais tester et redirigé vers la bonne URL en cas de différence à coup sûr

    C'est si compliqué que ça ???
     
  7. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 190
    J'aime reçus:
    1
    Tu as essayé au moins ? ... non ... (la je te fais les question ET les réponses) car si tu l'avais fait tu aurais vu que ça te renvoie ce que tu cherche. Bref...
    Quand tu pose une question soit précis et complet le code c'est pas de l'approximatif.
    Voila que tu sort un ".html" de ton chapeau pour justifier je sais pas quoi mais du coup ça renvoie pas "103" mais 103.html (logique)

    preg_match c'est surtout pratique pour tester la validité au travers d'un pattern c'est pas spécialement adapté pour transformer une donnée dans un contenu. Donc si tu veux tester la possible DC et avoir l'ID il est possible que tu doive passer par deux opérations.

    ça dépend souvent de comment on pose le problème de plus il est inutile d'ouvrir 40 sujet a la suite pour le même problème.
     
  8. Supermaury
    Supermaury WRInaute discret
    Inscrit:
    25 Mars 2009
    Messages:
    144
    J'aime reçus:
    5
    Peut-être un début de solution (mais j'avoue je suis une quiche en PHP / Expression régulière).

    Essaie ça, j'ai testé en local et ça semble fonctionner :

    Code:
    <?php
    $subject = "index.php?cPath=222-21_33_555";
    $pattern = '/[1-9]*$/i';
    preg_match($pattern, $subject, $matches);
    print_r($matches);
    ?>
    
    @++
     
  9. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    Je ne cherche rien à justifier, la preuve le .html que tu découvres est dans le 1er post :
    Code:
    Mes URLs sont de la forme :
    blablabla-blabla-blabla-21_52.html (réécrites)
    index.php?cPath=21_52 (non réécrites)
    Et d'autre par, je connais un petit peu le PHP (ironie) et je n'ai pas besoin de tester pour savoir que ta fonction ne me conviens pas étant donné qu'elle s'arrête au 1er "_" et que c'est justement le piège à éviter, d'où mon post ici.
    De plus, le .html ne fait pas partie du cPatch qui est :
    C'est pour cela que j'ai rééxpliqué plus succinctement dans un 2ème topic, vu qu’apparemment j'avais mal expliqué la 1ère fois. Merci quand même pour ton aide.

    Je vais tester ta solution Supermaury, je crois que c'est ce "i" que je cherchais. Je fais un retour dès que c'est OK.
     
  10. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
  11. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 190
    J'aime reçus:
    1
    C'est résolu donc pas de souci mais tu raconte une bêtise quand même :
    ^.*_
    Tout jusqu'au "_" depuis le début donc jusqu'au dernier puisque "_" fait parti de "tout", ou alors le php sur mes serveurs fonctionne pas comme le tiens car moi j'ai vérifié. :wink:
     
  12. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    @zeb exact ! Pwa désolé, je l'avais mal comprise, j'ai vraiment besoin de vacances ! En + j'ai du mal avec les expressions régulières, à part les vraiment basiques où je m'en sors mais le reste c'est la cata ! Ta fonction fonctionne sauf si il n'y a pas de "_" dans le cPath, comme dans les catégories mères, donc je garde la solution de Spout !

    Au plaisir de t'aider prochainement :)
     
  13. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 190
    J'aime reçus:
    1
    Lol moi aussi mais c'est bientôt le cas il me semble. On va pouvoir se refaire une santé a coup de dinde au marron :wink: (en vérité j'aime pas la dinde mais bon, les repas de familles n'ont pas que du mauvais puisqu'on tape dans la cave a l'occasion)
     
Chargement...
Similar Threads - preg_match simple blocage Forum Date
Problème de preg_match(). Développement d'un site Web ou d'une appli mobile 15 Mai 2020
Preg_match et bobo à la tête :) Développement d'un site Web ou d'une appli mobile 28 Janvier 2013
preg_match d'un lien href Débuter en référencement 16 Novembre 2010
preg_match_all et cellule d'un tableau Développement d'un site Web ou d'une appli mobile 28 Mai 2010
Utilisation preg_match URL Rewriting et .htaccess 30 Mars 2010
Référencement longe traîne vs. mots clé simple ? Référencement Google 25 Avril 2020
WordPress Créer un sitemap simple pour Google Débuter en référencement 9 Mars 2020
Google rachète CloudSimple Google : l'entreprise, les sites web, les services 19 Novembre 2019
Quel type de logiciel utiliser pour créer un site web simple et performant ? Demandes d'avis et de conseils sur vos sites 14 Octobre 2019
Supression de really simple ssl Netlinking, backlinks, liens et redirections 26 Septembre 2019