带“+”号的参数值通过url传递,后台取不到正确值

问题是这样的:

--W9/baseTestPoint.jsp

旧源代码:

javascript:

var url = "<%=appUrl%>/quality/qualityStandard.do?method=getSelectedStandard_d&mtrl_no="+mtrl_no
                        +"&quality_type="+quality_type+"&standard_item="+stardard_item;
Tldown.func("Load",encodeURI(url));

quality_type的值为“类型”

standard_item的值为“a+28+b+28”。

java后台取:

String quality_type = base.utf8(request.getParameter("quality_type"));

String standard_item = base.utf8(request.getParameter("standard_item"));

standard_item得到“a 28 b 28”

后来我通过在javascript输出encodeURI(url),encodeURIComponent(url)的值:

url:url

encodeURI(url):encode

encodeURIComponent(url):encodeComponent

经过对照,决定只对带特殊值的参数做encodeURIComponent转换。同时,寻找后台解码的方法。最后,解决方案如下:

  • javascript修改如下:

var url = "<%=appUrl%>/quality/qualityStandard.do?method=getSelectedStandard_d&mtrl_no="+mtrl_no
                        +"&quality_type="+quality_type+"&standard_item="+encodeURIComponent(stardard_item);
Tldown.func("Load",encodeURI(url));

  • java:

String standard_item = java.net.URLDecoder.decode(request.getParameter("standard_item"),"UTF-8");
String quality_type = base.utf8(request.getParameter("quality_type"));

 

总结:

encodeURI对+号不编码,而encodeURIComponent会对“+”号做编码,但是,不能对整个url做encodeURIComponent,因为这样会连“//”,“/”都会被解析,就不再是一个正确的url。

另外,对encodeURIComponent后提交的数据,必须使用java.net.URLDecoder.decode解析。而被encodeURI后的数据,如汉字,可以直接通过转换编码类型获得正确内容。

转载于:https://www.cnblogs.com/waterforever/archive/2009/12/18/1627118.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值