如何在JavaScript的准备编码的POST数据?(How to prepare encoded

2019-08-16 22:30发布

我需要POST方法发送数据。

例如,我有字符串“BLA BLA - BLA和”。 我尝试使用encodeURI ,并获得“BLA BLA - BLA和”作为结果。 我需要在这个例子中正确的东西来代替“&”。

我应该叫什么样的方法来准备正确的POST数据?

更新:

我需要转换只可能爆发POST请求charachters。 只有他们。

Answer 1:

>>> encodeURI("bla&bla&bla")

"bla&bla&bla"

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

"bla%26bla%26bla"


Answer 2:

您还可以使用escape() function.The escape()函数中的字符串编码。 此功能使一个字符串便携,因此它可以在任何网络传输到支持ASCII characters.This功能将特殊字符编码任何一台计算机,以下除外: * @ - _ + . / * @ - _ + . /

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

使用unescape()解码的字符串。

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

注意:

    escape() will not encode: @*/+

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

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

互联网上一些搜索后,我得到了以下内容:

逃逸()

不要使用它。

是encodeURI()

当你想要一个工作URL使用是encodeURI。 拨打这个电话:

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

要得到:

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

不要叫encodeURIComponent方法,因为它会破坏URL和返回

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

encodeURIComponent方法()

当你想编码URL参数一起使用encodeURIComponent方法。

参数1 = encodeURIComponent方法( “ http://xyz.com/?a=12&b=55 ”)

Then you may create the URL you need:

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

你会得到这个完整的URL:

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

需要注意的是encodeURIComponent不逃避的性格。 一个常见的错误是用它来创建HTML属性如href='MyUrl',这可能遭受喷射错误。 如果您是从字符串构建HTML,要么使用“,而不是‘为属性的报价,或加编码的一个额外层(’可以被编码为%27)。

REF: 你什么时候应该使用逃生,而不是是encodeURI / encodeURIComponent方法?

此外,由于使用的是JQuery的 ,看看这个内置的功能。



Answer 3:

使用encodeURIComponent方法()作为是encodeURI()将不进行编码: ~!@#$&*()=:/,;?+'

这在以下链接解释了相当不错:

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



Answer 4:

更近期的DOM API URLSearchParams (并通过URL ,可能其他人也)在某些情况下处理的编码。 例如,创建或使用现有的URL对象(像从一个锚定标记)一地图对象的条目,关键值对URL编码PARAMS(用于GET / POST /等,在应用程序/ x-WWW窗体-urlencoded MIME类型)。 注意表情符号,符号和双引号是如何没有任何特殊处理的编码(从复制的镀铬 devtools控制台):

var url = new URL(location.pathname, location.origin);
    Object.entries({a:1,b:"