url rewriting et caractère ' apostrophe %27

Par vanillementhe, il y a 13 ans


Salut tout le monde,

J'ai un souci d'url rewriting quand je fais passer en GET une apostrophe ' ou une quote " (code hexadécimal %27 = apostrophe ' ou %26 = quote ")

exemple Monsieur d'en bas passe dans la query string :

make_certificat?nom=Monsieur+d%27en+bas

ça génère une erreur page non trouvée.

QUESTION :
Comment envoyer par un formulaire en $GET une chaine de caractère contenant une apostrophe ' sans que ça plante l'url rewriting. (j'ai essayé des caractères spéciaux genre $, qui se devient %25 et ça passe).

La règle actuelle dans mon .htaccess: (les tirets - + tous les caractères alphanumériques + accentués + l'apostrophe ):

RewriteRule make_certificat/([a-zàâäéèêëîïôöûüA-Z0-9\'\-]+) make_certificat.php?nom=$1 [QSA]

J'ai essayé d'ajouter progressivement les flags B,L,NE rien n'y fait, la réécriture ne marche pas quand il y a une apostrophe codée %27 dans la query string .

Merci d'avance pour votre aide.

3 réponses

vanillementhe, il y a 13 ans

Personne n'a une idée? Je parie que c'est tout bête, je n'ai rien trouvé sur google.

Raphael986, il y a 13 ans

Bonjour

C'est normal, l'apostrophe n'est pas fait pour être présent dans une url.
Soit tu gardes le %27 et tu fais une fonction qui remplace ce %27 par " ' " quant tu récupères ta variable
Soit tu remplaces l'apostrophe par un - ou un _ et idem tu remplaces quant tu récupères ta variable

La deuxième solution est la meilleure car tu auras un meilleur référencement et l'url sera plus lisible qu'avec %27 pour l'utilisateur.

vanillementhe, il y a 13 ans

Oui je sais qu on utilise pas les apostrophes dans une URL ;)

En fait je me fiche pas mal du référencement pour cette page, c est juste un passage de chaîne de caractère d'un formulaire qui envoit en GET la chaine $nom à la page de la fonction qui l'écrit dans un Pdf.

Pas le choix, j ai besoin de récupérer les apostrophes.

Ça fonctionne très bien en local sans URL rewriting ou en distant avec URL rewriting sans apostrophes ni quote...

Y a t il une autre façon de récupérer une string d un formulaire?

Au passage, j ai remarqué que les magic quote sont activées sur mon hébergement mutualisé. Donc en gros quand je récupère $nom avec extract(), les apostrophes sont traduites de %27 en \' donc je suis obligée d utiliser trim() pour virer le \

Donc le problème n est pas dans la récupération de la chaîne, mais se localise au moment ou htaccess redirige. Quand il y a un % de n importe quel caractère exotique ça marche SAUF POUR LES QUOTES ET LES APOSTROPHES!