encodeURI与URLDecoder.decode()的讲解
对于IE,深表无奈啊。
习惯了用chrome了就先在Chrome上测试,OK,成功了。
接着换到Firefox,OK,继续成功。
然后换到IE....果断悲剧了...各种无奈..
1 //在servlet、JSP页面中都有添加如下代码2 response.setCharacterEncoding("UTF-8");3 request.setCharacterEncoding("UTF-8");4 5 //在jsp添加如下代码 6 pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"
添加了上面的代码,也还是依旧不行,只有IE是乱码,竟然还是IE8啊。。
太坑爹了。
经过和百度的一番战斗,终于找到了一个解决方案,如下:
1 //javascript里面加密两次,两次才可以的。
2 var url = "servlet/getText?“+ encodeURI(encodeURI("name="+name));
1 //在java里面,通过指定的编码解密即可。2 String name = URLDecoder.decode(request.getParameter("name"),"utf-8");
3 String nameDecode=URLDecoder.decode(name,"utf-8");
注意:对URL编码两次,则在java接受时也需解码两次。
通过以上的两步,就完美的解决了IE乱码的问题了。
转自:http://www.cnblogs.com/xshwy/archive/2011/12/16/2290363.html
因为js url在传值的过程中使用的是js自己默认的字符集编码规则,我们必须把它转成属于我们自己的编码规格.
在websphere 中使用的是url=encodeURI(encodeURI(url)); //用了2次encodeURI 测试成功,第一次转换没有尝试,
处理方法一:
js 程序代码:url=encodeURI(url);注意是整个URL
服务器端的代码:String linename = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
处理方法二:
js:var url="name="+name;
url=encodeURI(encodeURI(url)); //用了2次encodeURI
window.location = "<%=path%>/inner/line/line.jsp?"+url;
服务器端的代码:
String linename = request.getParameter(name);
//java : 字符解码
linename = java.net.URLDecoder.decode(linename , "UTF-8");
String linenameDe=URLDecoder.decode(linename,"UTF-8");//解码两次
提示:(1)encodeURI对应的是字符的UTF-8编码格式(默认的编码),%xx%yy%zz形式。另一个是对应的解码。
(2)“亲子”经两次“UTF-8”编码后为“%25E4%25BA%25B2%25E5%25AD%2590”
这是经过二次编码的URL编码,其中%25是经过二次编码的结果,其原形就是百分号,所以经一次解码后应为 %E4%BA%B2%E5%AD%90 然后就能看出这是经URL编码的UTF-8字符,每三组对应一个汉字,解码后就是"亲子"二字了.
(3)
当以url的形式(url?param=...)传递参数时,如果传递的是日文,或中文字符串那么在接收的时候是乱码形式。
这时需要将这些字符串转换成utf-8。
javascript:
encodeURI(value):将value转换成utf-8,
decodeURI(value):将utf-8的value反转成字符串。
java:
URLDecoder.decode(value, "utf-8");
URLEncoder.encode(value, "utf-8");
联系客服