Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

encodeURIComponent et js et php et simple quote

3 réponses
Avatar
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)

3 réponses

Avatar
unbewusst.sein
Une Bévue wrote:

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)
Avatar
unbewusst.sein
Une Bévue wrote:

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)
Avatar
unbewusst.sein
Une Bévue wrote:

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)