begin process at 2012 05 30 14:26:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Server Web

 > 

Apache

 > 

Echapper esperluette dans .htaccess


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Echapper esperluette dans .htaccess

vendredi 15 octobre 2010 à 11:09:59 | Echapper esperluette dans .htaccess

pcmanprogrammeur

Bonjour à tous,

J'ai une URL de la sorte : http://monsite/R&d
et dans mon htaccess je fais : RewriteRule ^([^/]*)$ /index.php?rch=$1
le problème est que lorsque je fais un $_GET["rch"] dans mon index.php, sa valeur est "R" au lieu de "R&d" ! Jusque là c'est normal sauf que j'aimerai pouvoir échapper l'esperluette (et commercial) dans l'htaccess !
J'ai trouvé cette piste : http://www.mediawiki.org/wiki/Apache_configuration/fr que j'ai adapté :
RewriteEngine On
RewriteMap ampescape int:ampescape
RewriteRule ^([^/]*)$ /index.php?rch=${ampescape:$1} [L]
Mais j'ai une erreur 500 de retournée !!! Grrrrrrrrrrrr !!!
Avez-vous une idée de commencer échapper les esperluette dans un .htaccess? Attention : le "&" restera en "&", je ne veux pas l'encoder en "%26" ou "%2526" pour que ça marche !
Merci d'avance !
vendredi 15 octobre 2010 à 19:13:36 | Re : Echapper esperluette dans .htaccess

neigedhiver

Salut,

Il ne faut pas utiliser d'esperluette dans l'url, parce qu'elle a un sens bien défini. C'est un peu comme si tu voulais appeler une fonction echo en php : t'as pas le droit. Ben là, c'est un peu pareil.
Tu peux (dois) utiliser urlencode() lors de la génération de tes URL. Le caractère correspondant est alors %26

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
vendredi 15 octobre 2010 à 23:14:32 | Re : Echapper esperluette dans .htaccess

neigedhiver

Arf, j'avais pas vu :

Attention : le "&" restera en "&", je ne veux pas l'encoder en "%26"


Conclusion tu ne peux pas, c'est impossible, y'a pas moyen. Point. & est un caractère réservé, tu ne PEUX PAS l'utiliser pour autre chose que ce à quoi il est destiné.
Voici ce que dit la RFC 1738 :
Code :
Reserved:

   Many URL schemes reserve certain characters for a special meaning:
   their appearance in the scheme-specific part of the URL has a
   designated semantics. If the character corresponding to an octet is
   reserved in a scheme, the octet must be encoded.  The characters ";",
   "/", "?", ":", "@", "=" and "&" are the characters which may be
   reserved for special meaning within a scheme. No other characters may
   be reserved within a scheme.

   (...)

   Thus, only alphanumerics, the special characters "$-_.+!*'(),", and
   reserved characters used for their reserved purposes may be used
   unencoded within a URL.

Source : RFC 1738 §2.2 URL Character Encoding Issues

Conclusion : soit tu te conformes au standard qui est implémenté par tous les navigateurs de la planète sans exception, soit tu développes ton propre navigateur avec ses propres standards et tu t'arranges pour qu'il soit utilisé par les visiteurs de ton site. Sinon, tu utilises autre chose que & pour "R&D" dans ton url.

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
samedi 16 octobre 2010 à 10:08:16 | Re : Echapper esperluette dans .htaccess

pcmanprogrammeur

Merci pour ta réponse !
Honnêtement, je pense que c'est réellement possible car regarde un site comme celui-ci arrive à le faire :
<a href="http://www.jobijoba.com/fr/emploi/R&d">Emploi R&d</a>
Donc doit-y avoir moyen de le faire : soit en modifiant l'htaccess ou par je ne sais quel autre moyen !
Vu le lien de mon premier poste, je pense qu'on peut le faire mais reste à savoir comment ...
samedi 16 octobre 2010 à 12:13:35 | Re : Echapper esperluette dans .htaccess

neigedhiver


Je crois que tu n'as pas bien compris comment fonctionne la réécriture d'url d'Apache. mod_rewrite d'Apache peut manipuler les url comme bon lui semble. Il a été codé en C et s'immisce dans le code d'Apache pour intercepter l'url avant qu'elle ne soit traitée comme telle.
mod_rewrite peut donc en faire à peu près ce qu'il veut. Je viens par exemple d'essayer ça :

Code :
RewriteEngine On
RewriteBase /
RewriteRule ^R&D   test.php [L]


Ca marche. Si je tape http://localhost/R&D j'affiche bien la page test.php
Ce qu'il y a, c'est que PHP quant à lui n'est absolument pas capable de manipuler les url comme le fait mod_rewrite à un aussi bas niveau du code.
PHP se contente, lui, de respecter le standard qui dit que & est un séparateur d'arguments.

A partir de là, il existe deux solutions (je viens à l'instant de me souvenir de la seconde, que j'avias complètement oubliée, même hier soir).

1/ tu réécris ton URL comme tu veux, sans esperluette : après tout, l'utilisateur ne le verra pas, donc tu t'en fous un peu, c'est juste pour toi, histoire que ça marche. Par exemple :
Code :
RewriteRule ^R&D  test.php?rech=R-D [L]

Tu récupères alors $_GET['rech'] = 'R-D'

2/ tu changes le séparateur d'arguments dans la configuration de PHP :
http://es2.php.net/manual/fr/ini.core.php#ini.arg-separator.input
Mais chez moi, ça ne fonctionne pas...

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
samedi 16 octobre 2010 à 12:16:10 | Re : Echapper esperluette dans .htaccess

kohntark

Membre Club
Salut,

D'après moi le serveur Web s'en fout un peu de la présence d'un "&", et ce n'est donc pas au niveau htaccess qu'il faut intervenir, mais PHP.
Pour la méthode GET (vue de PHP) le "&" a une signification particulière à laquelle tu ne pourras pas échapper: s'il s'agit de données il est impératif d'encoder les "&" ... et là tu n'as pas le choix !! (sinon, pour PHP, ce sont des paramètres d'URL)
Utiliser $_GET est donc à proscrire dans ce cas, mais PHP reste très flexible quant à l'analyse des URL :
je ne connais pas la structure de ton site et les URL que tu emploies, mais dans le cas que tu exposes un simple $_SERVER['QUERY_STRING'] devrait faire l'affaire (voir également 'REQUEST_URI'), en complément d'un htaccess qui se charge de la redirection vers index.php?...

C'est simple, mais ce n'est pas forcement très logique, et ça peut compliquer les choses.

Je n'y ai pas trop réfléchi mais sans doute est il possible de traiter ça côté htaccess. J'ai cependant bien peur que ça devienne une usine à gaz qui pose bien plus de problèmes que les solutions exposées ci dessus.


Cordialement,


Kohntark-
samedi 16 octobre 2010 à 12:21:43 | Re : Echapper esperluette dans .htaccess

kohntark

Membre Club
t'es trop rapide Neige, je n'avais pas vu ton message avant de poster le mien

... m'en vais prendre des cours de frappe clavier ^^


Cordialement,


Kohntark -
samedi 16 octobre 2010 à 12:24:44 | Re : Echapper esperluette dans .htaccess

pcmanprogrammeur

Très bien, merci à vous deux ! Je vais voir quelle solution est la meilleure. Pour régler mon problème j'avais en effet utilisé $_SERVER['QUERY_STRING'] mais je trouve ça crade de recréer ma variable $_GET à partir de $_SERVER['QUERY_STRING'] ! Ce serait tellement plus simple d'échapper les "&" dans le .htaccess ! Ils auraient pu y penser quand même :)
Bonne continuation les amis !!!
samedi 16 octobre 2010 à 12:42:52 | Re : Echapper esperluette dans .htaccess

kohntark

Membre Club

je trouve ça crade de recréer ma variable $_GET à partir de $_SERVER['QUERY_STRING']


Ce n'est pas totalement faut, et je disais moins même que ce n'était pas logique.
Comme nous l'avons déjà dit tu n'as pas le choix :
Si tu veux éviter toute bidouille ou micro pseudo bidouille : tu DOIS encoder le "&". La norme est ainsi faite, et tu as beau dire qu'"ils" auraient pu y penser, il n'y a pas le choix, il faut bien choisir un caractère !! (un autre aurait peut être été préférable, c'est vrai)

N'empêche qu'il me semble que l'idée que je donne soit la plus adaptée (mais comme d'hab je peut me tromper)
elle est généraliste, cad elle fonctionne quelque soit l'URL, et ne nécessite pas de ré écrire une ligne dans le htaccess à chaque fois que tu auras une url incluant un "&"
Une fois n'est pas coutume, mais je suis totalement en désaccord avec la seconde solution de Neige


Cordialement,

Kohntark -


Cette discussion est classée dans : php, index, htaccess, esperluette, rch


Répondre à ce message

Sujets en rapport avec ce message

Echapper des esperluettes dans un .htaccess [ par pcmanprogrammeur ] Bonjour à tous, J'ai une URL de la sorte : http://monsite/R&d et dans mon htaccess je fais : RewriteRule ^([^/]*)$ /index.php?rch=$1 le problè htaccess et Index of [ par pop70 ] Bonjour, j'apprends depuis récemment le php, et je teste mes pages sur un site hébergé par umbreon. Je me suis aperçu d'un problème plutôt contraignan probleme avec htaccess [ par kishkaya ] voila mon probleme est simple. Je sais que c'est pas important mais j'aimerais comprendre pourquoi : ErrorDocument  404  http://monhebergeur/index.ph Cible des liens [ par cobrachris ] Bonjour, question toutes bêtes :J'ai un index avec 5 div, et j'aurai voulu savoir comment indiquer à un lien sur ma page d'aller s'ouvrir dans tel div urlrewriting htaccess free [ par rockclimber ] Voila, je m'explique : J'aimerais que mon site chez free gère l'url-rewriting. Pour cela je passe par l'erreur 404, donc je redirige dans mon fichier Htaccess et PHP [ par ImmortalPC ] Salut, J'entre depuis un formulaire l'utilisateur et le passe. puis je l'envoie vers le dossier où se trouve le Htaccess mais comment faire pour que l free et les sessions !!! [ par kodiask ] Voilà j'ai un site sous free avec un espace membre et le problème survient pendant le login j'ai un message d'erreur qui apparait : Warning: session_ index.php?page=plan [ par brezoneg ] Bonjour,J'utilise un script et je voudrais changer la page index.La page que je voudrais faire apparaitre en index est présentée de la manière suivant header [ par panpan ] Hello,Est ce que quelqu'un aurait une idée d'ou pourrait venir cette erreur?Warning: Cannot add header information - headers already sent by (output s Récupérer URL page [ par tahiti_bob ] Bonjour,Je cherche à récupérer l'URL complète d'une page.Ex :L'adresse : http://serveur/index.php?page=forum&action=lireAvec la méthode $_SERVER[PHP_S


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,678 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales