参数中带有'+'时用escape编码,后台取参'+'变为空格的处理办法

接手别人的代码,做些bug修改和二次开发,今天发现了一个问题,前台Ajax请求的时候有个参数带有+号,传到后台查不到数据,调试发现+号后台被解码为空格,

发送:key=escape('abc+def');      实际发送:key=abc+def

接收:context.Request["key"];      实际接收:        abc def

+号在解码的时候被翻译成了空格,也就是前台没有对+号正确的编码,经查询发现:

escape不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。

接下来查找解决办法:

1、选择其他的编码函数。

      javascript主要的编码方式有escape、encodeURI、encodeURIComponent。其中:

   escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z 

     encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z 

  encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

     此处使用encodeURIComponent函数替换escape,问题解决。 

2、使用replace函数手动替换+号为%2B

    看到有人说因为某些原因无法使用encodeURIComponent函数,这时可以用escape('abc+def').replace('+','%2B')来处理,如果遇到其他需要替换的字符,可以参考下面的列表

空格 - %20

" - %22

# - %23

% - %25

& - %26

( - %28

) - %29

+ - %2B

, - %2C

/ - %2F

: - %3A

; - %3B

< - %3C

= - %3D

> - %3E

? - %3F

@ - %40

\ - %5C

| - %7C

posted @ 2017-07-18 15:18  飞向狙沙  阅读(1031)  评论(0编辑  收藏  举报