问题是这样的:

--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):带“+”号的参数值通过url传递,后台取不到正确值

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

经过对照,决定只对带特殊值的参数做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后的数据,如汉字,可以直接通过转换编码类型获得正确内容。

相关文章:

  • 2022-01-09
  • 2022-12-23
  • 2022-12-23
  • 2021-12-04
  • 2021-06-06
  • 2022-12-23
  • 2022-01-28
猜你喜欢
  • 2021-05-04
  • 2021-11-08
  • 2022-12-23
  • 2021-11-20
  • 2021-10-30
相关资源
相似解决方案