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


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

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.

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!