TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
0 D' k! Y/ R z9 X. o
9 b9 B- c+ n" L. |% g6 ^* t
4 Z' c- Z7 Z# s今天上午 做验证码的功能、碰巧是中文验证码、明明输入对了结果一直提示验证码错误、后台打印下 结果是乱码、检查了一下web.xml 也是配置了字符过滤器。. X- H& F7 c2 Y1 `, l
! P( @/ {8 L4 N, A% D; y
0 ^ o5 o6 o! c+ B& m% q
由于其他地方 也是用了ajax 但是提交中文时没有问题的、对比一下结果发现 type 类型不一样、前者是post请求后者是get请求(乱码)。6 M0 @5 _0 e/ U$ E5 t6 O; K* P
) Y: g, X L8 U% e) [& w3 M9 n) ?
2 t `+ R8 B, }百度了一下 get 和post请求的区别:
) }3 `9 [8 K" P& l1 W9 f对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题
& \7 }- U$ @ X: F1 q5 G" q request.setCharacterEncoding("utf-8");) n. N# ], \2 w5 W7 n% M- x5 b" n# s
而对于Get请求,因为请求参数会被附加到地址栏的URL之后,所以不能用上面的处理方法。应该这样:+ ^: U$ b& U1 u0 z H' L
String str=request.getQueryString();
. [: p* O4 r& ~) M$ Y //使用URLDecoder解码字符串- r5 S( R0 B( U* `) ^/ n
String str1=java.net.URLDecoder.decode(str,"utf-8");# ~- y1 m$ m2 Q
String[] paraStrings=str1.split("&");
4 Q; F- }% C: h+ t2 Z0 g% y$ W //paraStrings[0]就是第一个参数,依次类推...% q* v$ ]# H# s. T6 g) M
for(String paraString : paraStrings)) N* ?7 X& G1 m+ [2 W" a( u: Z ?
{/ V% J7 ]# p$ ^: I/ z
String[] nameValue=paraString.split("=");
/ y% t5 z7 p. p# u. s/ P" b: m //nameValue[0]就是表单的name,nameValue[1]就是表单name对应的值/ I7 ]5 s- P2 Y! Y) `# U
}
3 D4 Y) E; [; x# t- n I还有一种方法就是获取请求参数之后对请求参数值重新编码,也就是先将其转换成字节数组,再将字节数组重新解码成字符串。
- K& r; n" ]5 o) t; Z* H+ E5 w String str=request.getParameter("name");
e9 x* z5 J, u. s! F2 K4 o6 t9 E byte[] bytes=str.getBytes("ISO-8859-1");
# y: X0 j# `: ` String name=new String(bytes,"utf-8");2 a! G6 l+ G2 h/ [6 k
! {4 u/ o: C) H0 B" u所以get即使走过滤器 解码方式也是不一样的 所以导致乱码 改为post请求就ok了。
0 p8 N8 Q, l: ?
4 @4 p' M) m5 u+ X' s* P: J4 L9 T |
|