带“+”号的参数值通过url传递,后台取不到正确值 问题是这样的: --W9/baseTestPoint.jsp 旧源代码: javascript: var url = "
<!--ppUr-->/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: encodeURI(url): encodeURIComponent(url): 经过对照,决定只对带特殊值的参数做encodeURIComponent转换。同时,寻找后台解码的方法。最后,解决方案如下: javascript修改如下: var url = "
<!--ppUr-->/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后的数据,如汉字,可以直接通过转换编码类型获得正确内容。