26 九月 2008

GET和POST提交方式在web容器中的编码区别

当然,最主要的区别大家都知道

1、在发送请求时,安全性有区别

2、在提交数据时,数据量的大小有区别

但是两者在提交数据时,编码是不同的。GET在提交的时候不进行编码,提交的数据作为查询字符串附加到URL的末尾,然后发送到服务器。POST方式在提交时,会将数据进行编码(WEB容器默认的编码是ISO-8859-1)。所以要输出表单提交的数据,此时应该注意提交的方式以及编码的影响,否则如果存在中文,会出现乱码。

对于POST方式,如果需要得到表单提交的中文数据,不能直接通过request.getParameter()获取,否则得到的是以ISO-8859-1编码返回的字符串(中文会产生乱码);应该在读取数据前调用request.setCharacterEncoding()方法指定中文编码方式(GBK,GB2312)。在浏览器显示中文数据前,也应该调用respongse.setContentType()来指定字符编码方式为中文编码。

对于get方式,则必须拿到数据后自己指定编码重新构造字符串。如果用post那样的方式会发现毫无作用。为什么会这样?查了一下相关资料,貌似setCharacterEncoding方法是服务器支持的,所以有局限性;但是自己编码确实通用的。

没有评论: