encodeURIComponent et js et php et simple quote

Le
unbewusst.sein
je dois filer à php une uri contenant (en brut sans encodage) :

&infos=à l'adresse&

pour cela j'ai trouvé sur :
<http://phpjs.org/functions/rawurlencode:501>
un script simple :
function rawurlencode(str) {
str=(str + '').toString();
return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g,
'%27').replace(/(/g, '%28').replace(/)/g, '%29').replace(/*/g,
'%2A');
}

malheureusement avec le couple js/rawurlencode et php/urldecode,
a string "à l'adresse" est transformée en :
à l'adresse <<<< backslash devant le single quote "'"
___^________

les différentes étapes d'encodage/décodage :
coôté JS :
"à l'adresse" (brut non encodé) ;
"%C3%A0%20l'adresse" (encodé par encodeURIComponent(string)) ;
"%C3%A0%20l%27adresse" (encodé par rawurlencode(string)) ; ("'" -> %27)

côté PHP :
je transmets, pour essai, deux strings, l'une correspondant à
"encodeURIComponent(string)" et l'autre à "rawurlencode(string)".
et j'obtiens, pour "encodeURIComponent(string)" :
"à l'adresse" (avant décodage) ;
"à l'adresse" (après décodage par "urldecode(string)") ;

et pour "rawurlencode(string)" :
"à l'adresse" (avant décodage) ;
"à l'adresse" (après décodage par "urldecode(string)") ;

soit tjs la même chose
notez que la string "à l'adresse" a été copiée d'un butineur mais,
comme j'enregistre ça dans une bd, j'ai pu vérifier que j'ai la même
chose dans la bd.

Conclusion, je ne vois pas du tout d'où provient la transfo :
"'" -o-> "'"

génante.

Notez qui si j'utilise, côté PHP, rawurldecode au lieu de urldecode,
j'ai le MÊME résultat !!!
--
« Le temps est un grand maitre, dit-on. Le malheur est
qu'il tue ses élèves. »
(Berlioz)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
unbewusst.sein
Le #23819831
Une Bévue
Notez qui si j'utilise, côté PHP, rawurldecode au lieu de urldecode,
j'ai le MÊME résultat !!!



j'ajoute que je remarque que les chaînes %C3, par exemple, sont
automatiquement remplacées par le caractère, ici "à", dès le
$GET['le_truc']...

il y a donc un décodage builtin, de qui ? le butineur ou PHP ???
ce qui rendrait urldecode inutile...

--
« Le temps est un grand maitre, dit-on. Le malheur est
qu'il tue ses élèves. »
(Berlioz)
unbewusst.sein
Le #23819951
Une Bévue
il y a donc un décodage builtin, de qui ? le butineur ou PHP ???
ce qui rendrait urldecode inutile...



j'ai trouvé une solution :
preg_replace("/\'/", "'", $string);

mais bon, j'aimerais bien comprendre ce qui se passe...

--
« Le temps est un grand maitre, dit-on. Le malheur est
qu'il tue ses élèves. »
(Berlioz)
unbewusst.sein
Le #23820121
Une Bévue
il y a donc un décodage builtin, de qui ? le butineur ou PHP ???
ce qui rendrait urldecode inutile...



effectivement si je compare les URLs transmises, je n'ai pas la même
chose ...

la string en entrée : "à l'adresse" telle quelle donc avec des doubles
quotes, j'obtiens :
http://localhost/landp_mvc/php/quote_test.php?infos_std=%22%C3%A0%20l%27
adresse%22&infos_nstd=%22%C3%A0%20l%27adresse%22
avec Firefox nightly

et :
http://imac6/landp_mvc/php/quote_test.php?infos_std=%22à%20l'adresse%22&
infos_nstd=%22à%20l%27adresse%22
avec Safari

ou encore :
http://localhost/landp_mvc/php/quote_test.php?infos_std=%22%C3%A0%20l'ad
resse%22&infos_nstd=%22%C3%A0%20l%27adresse%22
avec Chrome

et enfin :
http://imac6/landp_mvc/php/quote_test.php?infos_std=%22%C3%A0%20l'adress
e%22&infos_nstd=%22%C3%A0%20l%27adresse%22
avec Opera Next

donc JE DOIS m'arranger pour que ça devienne indépendant du butineur...
--
« Le temps est un grand maitre, dit-on. Le malheur est
qu'il tue ses élèves. »
(Berlioz)
Publicité
Poster une réponse
Anonyme