preg_match toute simple mais blocage...
13 messages
• Page 1 sur 1
Consultez la formation au REFERENCEMENT naturel Google de WebRankInfo / Ranking Metrics
- lambi521
- WRInaute impliqué

- Messages: 782
- Inscription: 15 Juin 2010
preg_match toute simple mais blocage...
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 :
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 ?
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: Tout sélectionner
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 ?
- lambi521
- WRInaute impliqué

- Messages: 782
- Inscription: 15 Juin 2010
Re: preg_match toute simple mais blocage...
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 ?
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 ?
-

zeb - WRInaute accro

- Messages: 4560
- Inscription: 5 Déc 2004
Re: preg_match toute simple mais blocage...
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.
* 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.
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 !
ç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.
- lambi521
- WRInaute impliqué

- Messages: 782
- Inscription: 15 Juin 2010
Re: preg_match toute simple mais blocage...
* 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é (_)
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
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)
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 ???
-

zeb - WRInaute accro

- Messages: 4560
- Inscription: 5 Déc 2004
Re: preg_match toute simple mais blocage...
lambi521 a écrit: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.
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)
lambi521 a écrit: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
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.
lambi521 a écrit:C'est si compliqué que ça ???
ç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.
- Supermaury
- Nouveau WRInaute

- Messages: 46
- Inscription: 25 Mar 2009
Re: preg_match toute simple mais blocage...
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 :
@++
Essaie ça, j'ai testé en local et ça semble fonctionner :
- Code: Tout sélectionner
<?php
$subject = "index.php?cPath=222-21_33_555";
$pattern = '/[1-9]*$/i';
preg_match($pattern, $subject, $matches);
print_r($matches);
?>
@++
- lambi521
- WRInaute impliqué

- Messages: 782
- Inscription: 15 Juin 2010
Re: preg_match toute simple mais blocage...
Je ne cherche rien à justifier, la preuve le .html que tu découvres est dans le 1er post :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)
- Code: Tout sélectionner
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 :
Ma variable cPath contient le chemin de la catégorie courante, par exemple :
catégorie_souscatégories_sousouscatégories = 21_52_103
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.ç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.
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.
- lambi521
- WRInaute impliqué

- Messages: 782
- Inscription: 15 Juin 2010
Re: preg_match toute simple mais blocage...
Ok problème résolu, Spout a trouvé la solution la plus simple (comme d'hab ^^), un explode !
http://forum.webrankinfo.com/expression-reguliere-simple-mais-bloque-t ... l#p1342705
http://forum.webrankinfo.com/expression-reguliere-simple-mais-bloque-t ... l#p1342705
-

zeb - WRInaute accro

- Messages: 4560
- Inscription: 5 Déc 2004
Re: preg_match toute simple mais blocage...
lambi521 a écrit: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
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é.
- lambi521
- WRInaute impliqué

- Messages: 782
- Inscription: 15 Juin 2010
Re: preg_match toute simple mais blocage...
@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
Au plaisir de t'aider prochainement
-

zeb - WRInaute accro

- Messages: 4560
- Inscription: 5 Déc 2004
Re: preg_match toute simple mais blocage...
lambi521 a écrit:j'ai vraiment besoin de vacances !
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
13 messages
• Page 1 sur 1
Formation recommandée sur ce thème :
Formation REFERENCEMENT naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Warning: preg_match() [function.preg-match]:
- Nouvelle arme anti-AdSense ou simple Content Match ?
- php preg masque
- overture precision match et overture site match
- Rewriting simple/pas-simple !
- Blocage...
- Blocage temporaire de GMail
- Blocage sélectif de vidéos
- htacess probleme de blocage
- Blocage adsense ?
- Recherche de citations d'un site en texte brut
Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
