Accueil > Forum > > > > Echapper esperluette dans .htaccess
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
|
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
|
 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
|
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
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|