Url rewritting et /

Eléphant du PHP | 294 Messages

13 mars 2008, 12:09

Bonjour

j'aimerais autoriser la recuperation d'un / dans une variable,
j'ai fait ça:

[a-zA-Z0-9/-]

mais ça ne fonctionne pas.

merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 mars 2008, 13:33

Hmm.. ça devrait pourtant fonctionner.. le slash n'est pas un caractère spécial des expressions régulières, tu ne devrais donc pas rencontrer de problème... Tu peux nous montrer l'expression complète et un exemple de chaine/url que tu testes (et les résultats attendu/obtenu aussi, tant qu'on y est :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 294 Messages

13 mars 2008, 23:44

voila:

RewriteRule fiche-([a-zA-Z-]+)-([a-zA-Z-]+)-([a-zA-Z0-9-/]+)-([0-9]+).html fiche_article.php?cat=$1&mq=$2$rf=$3&id=$4 [L]

c'est ([a-zA-Z0-9-/]+) qui pose problème car avec le / tous le site plante, ça se retablis si je le retire.
merci

ViPHP
ViPHP | 4674 Messages

14 mars 2008, 01:50

'soir :).

Et si tu précisais que ta chaîne doit commencer par fiche-..., de cette façon :

Code : Tout sélectionner

RewriteRule ^fiche-([a-zA-Z-]+)-([a-zA-Z-]+)-([a-zA-Z0-9-/]+)-([0-9]+).html fiche_article.php?cat=$1&mq=$2$rf=$3&id=$4 [L]
(note le ^ en tout début)
Ça devrait éviter un problème sur le parsing des dossiers.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 294 Messages

14 mars 2008, 10:22

Ca fonctionne pas, ça me met même une erreur en plus. j'ai essayé de contourné le problème(lâchement) en éliminant le / à la source pour le remplacer par un - , mais apparemment je ne sais pas faire :cry:

j'ai cette fonction, qui me permet de nettoyer les urls qui sont récupérés à partir de données dynamiques :
function stripCar($string){
	return strtr($string,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ?:\'!.',
'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY -----');
}
mais je ne sais pas comment y intégrer un /

merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 mars 2008, 11:16

Le tiret "-" doit être le dernier caractère de ta classe pour qu'il ne soit pas interprété comme un intervale. Si tu lui indique "0-9-/" comment peut-il s'avoir si tu veux les caractères dont les codes ascii sont compris entre ceux de '0' à '9' ou de '9' à '/' ou de '0' à '/' ou je ne sais quoi encore :)

Essaye comme ceci :

Code : Tout sélectionner

([a-zA-Z0-9/-]+)
Si cela ne fonctionne toujours pas, tu peux essayer de backslasher le slash (\/) mais ca ne devrait en théorie pas être nécessaire :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 294 Messages

14 mars 2008, 20:19

ok merci
ça fonctionne, mais en fait les / dans des références ça fonctionne pas j'ai retiré les /
:wink: