String name="张三";
int id=3;
//两次进行编码
name=java.net.URLEncoder.encode(name,"UTF-8");
name=java.net.URLEncoder.encode(name,"UTF-8");
url="/test/search.do?name="+name+"&"+id;//
一下是controller内的相应
@RequestMapping("/search.do”)
public String search(@RequestParam("name")String name, @RequestParam("id")int id)
{
name=java.net.URLDecoder.decode(name,"UTF-8");//此时name是张三
....................
}
原因分析:在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码,两位两位取出后进行解码,然后再传递给处理页面,然后由处理页面进行再次解码,所以需要使用两次URLEncoder.encode方法。
第一次是把中文编码成%xy的格式; 第二次是对%xy中的%进行编码,%编码成%。客户端和服务器在传递数据时可以用过滤器filter解决字符编码问题,但filter只能解决post方式提交的数据。对于get方式,可以使用两次java.net.URLEncoder.encode并在服务器中使用java.net.URLDecoder.decode 今天在springmvc遇到这个问题,尽管页面、类和web容器都统一了字符编码,提交的数据依然是乱码,所以就采用了2次URLEncoder。encode编码方式,乱码问题就解决了。
当然,不管在js中,还是后台,只是调用的编码解码函数不同而已,问题解决原理,却是一样的。