在做搜索功能时,需要输入关键字,如果搜索出来的结果很多,又需要分页。这里用URL重写技术(即href="?keyword=关键字&page=分页数"),就涉及到了传递中文关键字的问题。
我也是在网上找了很多,才找到了一个合适的办法。
在前台JSP页面中,这里就需要给超链接编码,其实也可以说只是给中文参数编码,不过我是对整个超链接编码。编码要进行两次,使用Javascript自带的encodeURI()方法。所以就是用javascript来操作,代码如下:
<script>
$(function(){ //这里用的JQuery语法
$("a.class1").each(function(i){ // 对所有类名是class1的<a>标签依次进行下面的操作
var url = $(this).attr("href"); // 获取这个<a>标签的href值,就是url啦
url = encodeURI(url); // 进行第一次编码
url = encodeURI(url); // 进行第二次编码
$(this).attr("href", url); // 将编码后的url,设置为这个<a>标签的href值。这样,这个<a>标签的href,即url就是经过了两次编码的
});
});
</script>
前台的URL经过两次编码后,用户再点击这个<a>标签的时候,传递到浏览器的值就能正常显示中文了。
这个URL通常会再调用Servlet中的方法,所以在后台Servlet中还需要进行解码,代码很简单,如下所示:
String keyword = request.getParameter("keyword"); // 获取关键字keyword,只有关键字是中文,分页数是数字,不受这个问题影响
try{
keyword = java.net.URLDecoder.decode(keyword, "utf-8"); // 进行解码
}catch(Exception e){
e.printStackTrace();
}
.... // 后面就是正常使用这个keyword关键字了,比如执行sql查询,正常使用即可。