如何在JavaScript上准备编码的POST数据?

我需要通过POST方法发送数据。

例如,我有字符串“bla&bla&bla”。 我尝试使用encodeURI ,结果得到了“bla&bla&bla”。 我需要用本例中正确的内容替换“&”。

我应该调用哪种方法来准备正确的POST数据?

更新:

我只需要转换可能会破坏POST请求的charachters。 只有他们。


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

"bla&bla&bla"

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

"bla%26bla%26bla"

你也可以使用escape()函数escape()函数编码一个字符串。 该函数使字符串具有可移植性,因此它可以通过任何网络传输到任何支持ASCII字符的计算机。此函数对特殊字符进行编码,但以下情况除外: * @ - _ + . / * @ - _ + . /

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。

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";

你会得到这个完整的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:你应该什么时候使用escape来代替encodeURI / encodeURIComponent?

另外,当您使用JQuery时 ,请查看此内置函数。


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

以下链接已经很好地解释了这一点:

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

链接地址: http://www.djcxy.com/p/22151.html

上一篇: How to prepare encoded POST data on javascript?

下一篇: Flask request.args vs request.form