web-dev-qa-db-fra.com

Comment préparer encodé POST données sur javascript?

Je dois envoyer des données par la méthode POST.

Par exemple, j'ai la chaîne "bla & bla & bla". J'ai essayé d'utiliser encodeURI et j'ai obtenu "bla & bla & bla" comme résultat. Je dois remplacer "&" par quelque chose de correct pour cet exemple.

Quel type de méthode dois-je appeler pour préparer les données POST correctes?

MIS À JOUR:

Je n'ai besoin de convertir que les personnages qui peuvent avoir cassé la demande POST. Seulement eux.

13
Dmitry
>>> encodeURI("bla&bla&bla")

"bla&bla&bla"

>>> encodeURIComponent("bla&bla&bla")

"bla%26bla%26bla"
18
Álvaro González

Vous pouvez également utiliser la fonction escape().La fonction escape() code une chaîne . Cette fonction rend une chaîne portable, de sorte qu'elle peut être transmise sur n’importe quel réseau à tout ordinateur prenant en charge les caractères ASCII. à l'exception de: * @ - _ + . /

var queryStr = "bla&bla&bla";
alert(queryStr);               //bla&bla&bla
alert(escape(queryStr));       //bla%26bla%26bla

Utilisez unescape() pour décoder une chaîne.

var newQueryStr=escape(queryStr);
alert(unescape(newQueryStr));   //bla&bla&bla

Remarque:

    escape() will not encode: @*/+

    encodeURI() will not encode: ~!@#$&*()=:/,;?+'

    encodeURIComponent() will not encode: ~!*()'

Après quelques recherches sur Internet, j'ai obtenu ce qui suit:

échapper()

Ne l'utilisez pas.

encodeURI ()

Utilisez encodeURI lorsque vous voulez une URL fonctionnelle. Faites cet appel:

encodeURI("http://www.google.com/a file with spaces.html")

obtenir:

http://www.google.com/a%20file%20with%20spaces.html

N'appelez pas encodeURIComponent car cela détruirait l'URL et renverrait

http%3A%2F%2Fwww.google.com%2Fa%20file%20with%20spaces.html

encodeURIComponent ()

Utilisez encodeURIComponent lorsque vous souhaitez coder un paramètre d'URL.

param1 = encodeURIComponent (" http://xyz.com/?a=12&b=55 ")

Then you may create the URL you need:

url = "http://domain.com/?param1=" + param1 + "&param2=99";

Et vous obtiendrez cette URL complète:

http://www.domain.com/?param1=http%3A%2F%2Fxyz.com%2F%Ffa%3D12%26b%3D55¶m2=99

Notez que encodeURIComponent n'échappe pas au caractère '. Un bug courant consiste à l’utiliser pour créer des attributs HTML tels que href='MyUrl', qui pourraient subir un bogue d’injection. Si vous construisez du code HTML à partir de chaînes, utilisez "au lieu de" pour les guillemets d'attributs ou ajoutez une couche d'encodage supplémentaire ('peut être codé sous la forme% 27).

REF: Quand êtes-vous censé utiliser d'échappement au lieu d'encodURUR/encodeURIComponent?

De plus, en tant que vous utilisez JQuery, jetez un oeil à this fonction intégrée.

12
Bhushan Firake

Utilisez encodeURIComponent () car encodeURI () ne codera pas: ~!@#$&*()=:/,;?+'

Cela a été très bien expliqué au lien suivant:

http://xkr.us/articles/javascript/encode-compare/

6
user1680049

Des API DOM plus récentes pour URLSearchParams (et via URL , éventuellement d'autres également) gèrent le codage dans certains cas. Par exemple, créez ou utilisez un objet URL existant (comme à partir d'une balise d'ancrage). Je mappe les entrées d'un objet en tant que paires clé-valeur pour les paramètres encodés en URL (à utiliser pour GET/POST/etc dans application/x-www-form-urlencoded type MIME). Notez comment les emoji, les esperluettes et les guillemets sont codés sans manipulation particulière (copiés à partir de la console Chrome devtools):

var url = new URL(location.pathname, location.Origin);
    Object.entries({a:1,b:"????",c:'"stuff&things"'}).forEach(url.searchParams.set, url.searchParams);
    url.search;
    "?a=1&b=%F0%9F%8D%BB&c=%22stuff%26things%22"

fetch(url.pathname, {
    method: 'POST',
    headers: new Headers({
        "Content-type": "application/x-www-form-urlencoded"
    }),
    // same format as GET url search params a&b&c
    body: url.searchParams
}).then((res)=>{ console.log(res); return res }).catch((res)=>{ console.warn(res); return res; });
0
jimmont