⽤get⽅式提交请求的url带有中⽂参数
⼜碰到JSP页⾯中⽂乱码问题,经过⼀次encodeURI处理后仍旧是乱码,后来经过两次encodeURI后正常显⽰中⽂
以前也碰到过同样的问题,没深究,这次⽹上搜集了⼀些资料,记录下来留做备份
前端JS:
var name=“中⽂”;
var url = “demo.jsp?name=” +name;
url=encodeURI(url);
url=encodeURI(url); //写⼀个不⾏。如果写⼀个就是号。
服务端获取:
String Parameter(“name”);
name = java.URLDecoder.decode(name,“UTF-8”);
System.out.println(name);
因为Tomcat服务器会⾃动帮你做⼀次URLDecode,所以再加上你⾃⼰在代码⾥⾯写的URLDecode,⼀共就是两个Decode了,既然要两次Decode,当然就需要两次Encode了。或许你会问,⼲脆只Encode⼀次,然后在java代码⾥不Decode,呵呵,这个也是不⾏的,这其实也就是为什么要进⾏Encode的原因吧
⼀般情况下, 发送 encodeURIComponent(parmeName)+"="+encodeURIComponent(parmeValue); 接收时, 直接 String paramValue = Parameter(paramName); // 容器⾃动解码.
我们知道 encodeURIComponent 使⽤的是 UTF-8 编码规则来编的. 如果 Parameter(paramName) 时,容器也按 UTF-8 解的话,是正确的. 根本⽆须在客户端 进⾏⼆次的 encodeURIComponent(…)
param name如果 Parameter(paramName),容器没有按 UTF-8 解的话, 结果只有⼀个,就是乱码! 容器按什么编码来解码,决定于request.setCharacterEncoding(***) 或者 服务器程序配置.
如果你在 jsp 程序中,能够 request.setCharacterEncoding(“UTF-8”), 并且 修改服务器配置,让容器在解 GET 提交的参数时,使⽤ UTF-8.
客户端提交前不⽤⼆次编码, 接收时,也只要直接 Parameter(paramName) 即可。
为什么⽹上会有⼈提出在客户端对字符串重复编码两次呢. 如果因为项⽬需要,不能指定容器使⽤何种编码规则来解码提交的参数, ⽐如:需要接收来⾃不同页⾯,不地编码的参数内容时。 (⼜或者是开发⼈员被这有点复杂的东东搞得晕头转向,不懂得如何正确的去做好这接收参数的⼯作) 这个时候,在客户端对参数进⾏⼆次编码,可以有效的避开。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论