2010年11月25日

get请求参数乱码问题

如果提交的参数包含中文,只要实用post方式提交请求即可。但是使用post的话,每次刷新页面,浏览器都会弹出对话框提示用户,对于搜索功能就显得不可接受了。

通常一次搜索请求都是通过get方式提交的。但是在tomcat里,直接使用request的getParameter方法得到的参数总是会乱码。

对于这个问题的原因,从源代码级剖析tomcat乱码问题(如果这个链接失效,也可以访问这里)这篇文章已经解释的很清楚了,并且也提供解决方法。但是直接修改tomcat-util.jar显然不是很好。

以下是我现在采用的方法:

String queryString = request.getQueryString();//get raw query string  
 if (queryString != null && queryString.length() > 0) {  
   queryString = new String(queryString.getBytes("ISO-8859-1"), "GBK");//process url which is not urlencoded  
   queryString = URLDecoder.decode(queryString, "GBK");//decode url  
   Pattern pattern = Pattern.compile("q=([^&#]*)");  
   Matcher matcher = pattern.matcher(queryString);  
   if (matcher.find()) {  
    query = matcher.group(1);  
   }  
 }