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.
>>> encodeURI("bla&bla&bla")
"bla&bla&bla"
>>> encodeURIComponent("bla&bla&bla")
"bla%26bla%26bla"
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 + "¶m2=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.
Utilisez encodeURIComponent () car encodeURI () ne codera pas: ~!@#$&*()=:/,;?+'
Cela a été très bien expliqué au lien suivant:
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; });