ie8兼容性问题(七) js参数值中文情况下无法传到controller

项目中遇到这样一个问题,要实现一个下载功能,参数有两个,一个id,一个标题。其中标题是中文。

js写法:
var params = {
  "id": "0001",
  "title": "需求响应速率概述"
}
window.open("downloadFilesController.do?download&id=" + params.id + "&title=" + params.title);

controller写法:
@controller
@requestMapping("/downloadFilesController")
public class downloadFilesController{
  @requestMapping(params = "download")
  public void download(
    HttpServeletRequest request,
    HttpServletResponse response,
    @RequestParam("id") String id,
    @RequestParam("title") String title
  ) {
    commonFileDownBizc.downloadFile(request, response, id, title);
   }
}

这段代码在chrome中是没有问题的。但是在ie8中就会报错。原因是这样的。ie8中是不能通过get方法传递中文参数到controller的。所以需要在js中给中文参数进行转码,转为Unicode号,然后到controller中进行解码,再传递给biz层。

js写法:
var params = {
  "id": "0001",
  "title": encodeURI(encodeURI("需求响应速率概述"))
}
window.open("downloadFilesController.do?download&id=" + params.id + "&title=" + params.title);

controller写法:
@controller
@requestMapping("/downloadFilesController")
public class downloadFilesController{
  @requestMapping(params = "download")
  public void download(
    HttpServeletRequest request,
    HttpServletResponse response,
    @RequestParam("id") String id,
    @RequestParam("title") String title
  ) {
    title = URLDecoder.decode(title, "utf-8");
    commonFileDownBizc.downloadFile(request, response, id, title);
   }
}

注意: 转码一定要两次转码。第一次将三字节的中文转为带%的单字节,第二次将%看做转义字符进行第二次转码。具体的网上有很多文献可以参考。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值