Séparer avec un + ne marche pas

WRInaute passionné
Bonjour :),

Je souhaite faire un petit rewriting avec des "+" au lieu des traditionnels tirets "-", sauf pour 1 séparateur.
Ma var1 est un texte et mes var2/3/4 sont des nombres (et var4 peut parfois être négatif !!).

Ce code marche :
Code:
RewriteRule ^page-(.*)-(.*)-(.*)-(.*).html /page.php?var1=$1&var2=$2&var3=$3&var4=$4 [QSA,L]

Ce code ne marche pas :
Code:
RewriteRule ^page-(.*)+(.*)+(.*)+(.*).html /page.php?var1=$1&var2=$2&var3=$3&var4=$4 [QSA,L]

J'aimerais bien comprends pourquoi et trouver une solution. Pourriez-vous m'aider s'il vous plait :) ?
 
WRInaute accro
Re: Séparer avec un "+" ne marche pas (alors que &

yazerty a dit:
Bonjour :),

Je souhaite faire un petit rewriting avec des "+" au lieu des traditionnels tirets "-", sauf pour 1 séparateur.
Ma var1 est un texte et mes var2/3/4 sont des nombres (et var4 peut parfois être négatif !!).

Ce code marche :
Code:
RewriteRule ^page-(.*)-(.*)-(.*)-(.*).html /page.php?var1=$1&var2=$2&var3=$3&var4=$4 [QSA,L]

Ce code ne marche pas :
Code:
RewriteRule ^page-(.*)+(.*)+(.*)+(.*).html /page.php?var1=$1&var2=$2&var3=$3&var4=$4 [QSA,L]

J'aimerais bien comprends pourquoi et trouver une solution. Pourriez-vous m'aider s'il vous plait :) ?

Parce que le "+" est un "meta-caractère" dans une expression régulière (comme ., *, (), [], ^, $, ?, \ et quelques autres qui ne me viennent pas à l'esprit). Il faut donc l'escaper (mettre un \ devant).

Sinon n'oublie pas que le + est l'encodage d'un espace dans une URL, ça peut donc poser d'autres problèmes par ailleurs.

Bref, je conseillerais d'éviter.

Jacques.
 
WRInaute passionné
Ah vi, donc :

Code:
RewriteRule ^page-(.*)\+(.*)\+(.*)\+(.*).html /page.php?var1=$1&var2=$2&var3=$3&var4=$4 [QSA,L]

et ça marche effectivement :) !
Merci à tous les 2 !

Sinon n'oublie pas que le + est l'encodage d'un espace dans une URL, ça peut donc poser d'autres problèmes par ailleurs.

Ah vi je n'y avais pas pensé ! Dans le cas de l'urlencode() ça peut être gênant.
Du coup je fais comme ceci : page-var1-var2-var3+var4.html
Je fais un urlencode sur le var1 avant sa mise dans l'url et un urldecode pour le récupérer sur l'autre page.

Ca ne devrait poser aucun problème ainsi, n'est-ce pas :) ?
 
WRInaute accro
yazerty a dit:
Euh, ce n'est pas %20% l'espace dans une url :- ? Dans quel cas a-t-on des "+" ?
S'il y a un article/sujet à propos des contre-indications au "+" ça m'intéresse (objectivement).

Dans la partie "query string", i.e. après le ?, tous les caractères peuvent être encodés en %xx (sans % à la fin), mais l'espace étant considéré comme plus présent que la moyenne, on peut aussi le remplacer par + plutôt que %20.

Utilise un formulaire en GET avec un champ texte dans lequel tu mettras un espace et tu verras le résultat (par exemple en effectuant une recherche sur G).

Dans la partie avant le ? normalement il est interprété tel quel, mais tu n'es jamais à l'abri d'une surprise, surtout si tu es en train de faire du rewriting et que l'un de tes paramètres pourrait contenir un espace qui pourrait donc être encodé en + (et vice-versa).

Jacques.
 
WRInaute passionné
Je viens d'éditer mon message, sans avoir eu le temps de voir ta réponse avant :-/.
Donc comme je l'explique dans mon dernier message ça te parait correct ?
 
Discussions similaires
Haut