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