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

Dmi*_*try 14 javascript encoding

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

例如,我有字符串"bla&bla&bla".我尝试使用encodeURI并得到"bla&bla&bla"作为结果.对于这个例子,我需要用正确的东西替换"&".

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

更新:

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

Álv*_*lez 21

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

"bla&bla&bla"

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

"bla%26bla%26bla"
Run Code Online (Sandbox Code Playgroud)

  • 如果试图准确模拟浏览器将上传的内容,则应注意 Web 表单(尤其是那些没有文件附件的表单)使用“application/x-www-form-urlencoded”编码。在这种格式中,浏览器会将空格编码为 `+` 字符而不是 `%20`(就像 `encodeURIComponent` 的情况)——编码是不明确的,但任一选项都解码为相同的数据。[请参阅此处的格式。](https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1) 我要强调的是 `encodeURIComponent` 是这个答案的方法。 (2认同)

Bhu*_*ake 13

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

var queryStr = "bla&bla&bla";
alert(queryStr);               //bla&bla&bla
alert(escape(queryStr));       //bla%26bla%26bla
Run Code Online (Sandbox Code Playgroud)

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

var newQueryStr=escape(queryStr);
alert(unescape(newQueryStr));   //bla&bla&bla
Run Code Online (Sandbox Code Playgroud)

注意:

    escape() will not encode: @*/+

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

    encodeURIComponent() will not encode: ~!*()'
Run Code Online (Sandbox Code Playgroud)

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

逃逸()

不要使用它.

是encodeURI()

如果需要工作URL,请使用encodeURI.拨打这个电话:

encodeURI("http://www.google.com/a file with spaces.html")
Run Code Online (Sandbox Code Playgroud)

要得到:

http://www.google.com/a%20file%20with%20spaces.html
Run Code Online (Sandbox Code Playgroud)

不要调用encodeURIComponent,因为它会破坏URL并返回

http%3A%2F%2Fwww.google.com%2Fa%20file%20with%20spaces.html
Run Code Online (Sandbox Code Playgroud)

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";
Run Code Online (Sandbox Code Playgroud)

您将获得这个完整的URL:

http://www.domain.com/?param1=http%3A%2F%2Fxyz.com%2F%Ffa%3D12%26b%3D55¶m2=99
Run Code Online (Sandbox Code Playgroud)

请注意,encodeURIComponent不会转义'字符.一个常见的错误是使用它来创建html属性,例如href='MyUrl',可能遭受注入错误的html属性.如果要从字符串构造html,可以使用"而不是"作为属性引号,或者添加额外的编码层('可以编码为%27).

REF:你什么时候应该使用escape而不是encodeURI/encodeURIComponent?

此外,在使用JQuery时,请查看内置函数.


小智 6

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

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

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