通过Ajax的post方式前端参数传到后端与URLEncoder与URLDecoder编解码问题

来源:互联网 发布:java微信接口开发实例 编辑:程序博客网 时间:2024/06/04 23:31

Ajax传递大量参数的时候是是以url的形式传递到后端的,即在url后面拼接问号加参数的格式拼成向后端访问的参数。

在把请求参数给ajax之前一般会进行序列化:

例如var param = $('.queryForm').serialize();

然后,在Ajax里data:param,把序列化的参数给ajax拼在url:url后面,组成新的url发送到指定url的后端请求数据。

你在后端要获取里面的带汉字的参数,发现一家被编码成%加上16进制字符串形式了,。

确实,var param = $('.queryForm').serialize();已经把参数里特殊字符按照URLEncoder的方式编码了,

小在后端按照URLDecoder方式解码出你要的参数。

String ss = "su.name=韩庚 su.age=12 su.class=A-*12_\tAA/tAA/nAA\nB&url=su/bol\\sole\\\\my.html?pass=bidd&sid=ui19280989890";

System.out.println(URLEncoder.encode(ss,"utf-8"));

//输出:su.name%3D%E9%9F%A9%E5%BA%9A+su.age%3D12+su.class%3DA-*12_%09AA%2FtAA%2FnAA%0AB%26url%3Dsu%2Fbol%5Csole%5C%5Cmy.html%3Fpass%3Dbidd%26sid%3Dui19280989890

重要说明:URLEncoder.encode(str,"编码"),URLDecoder.decode(str,"编码");

前端encode与后端decode编码一直,才能解析出正常的参数

encode特殊字符串总结对照表:
  = 编码后 %3D
   (空格)编码后+(加号)
   汉字编码后:一串百分号拼上16进制数格式的字符
   *(星号)编码后不变
   .(点)编码后不变
   &编码后%26
   /(斜杠)编码后%2F
   \(反斜杠)编码后%5C
   \t编码后%09
   /t编码后不变
   /n编码后不变
   \n编码后%0A
   ?编码后%3F

   !编码后%21

  (编码后%28

   )编码后%29

    #编码后%23

   %编码后%25


注意:区别于经过escape()方法编码:escape()编码空格变成%20


阅读全文
0 0
原创粉丝点击