springMVC重定向并且前端从url取参数的中文值乱码问题、部分安全性

对于重定向的URL拼接可以使用RedirectAttributes类。

其中中文传参问题需要进行两次编码。第一次编码由中文转成数字+字母类型+%,第二次编码变成存数字类型+符号,这样不同的编码都可以相互转换、适用。

注意:使用RedirectAttributes类进行url拼接时,会自动对中文进行一次编码。所以此时只需要再进行一次编码就可以。


@RequestMapping("/agriecomIndex/search/forward")
public String searchForward(@RequestParam(defaultValue = "1")int page, @RequestParam(defaultValue = "20")int limit, String categoryId, String keyword,RedirectAttributes attributes){
        try {
            keyword=new String(keyword.getBytes("ISO-8859-1"),"UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        System.out.println(keyword);
        try {
            keyword=URLEncoder.encode(keyword,"UTF-8");
            keyword=URLEncoder.encode(keyword,"UTF-8");

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return "redirect:/search.html?keyword="+keyword+"&categoryId="+categoryId;
// uri=search.html?keyword=氨基&categoryId=5

/*    Spring3.1版本封装的addAttribute方法自动帮你拼接url并且转码一次            */
//        attributes.addAttribute("keyword",keyword);               
//        attributes.addAttribute("categoryId",categoryId);
//内部默认进行一次utf-8转码 此时把中文值转为%,数字和字母,所以需要第二次编码转成%和数字
//只有全数字+%的情况 编码之间的相互转换才不会乱码
//        return "redirect:/search.html";

    }

//页面js代码 获取重定向后页面URL请求的参数如:
$(document).ready(function() {
    /* 搜索页面 */
    /*$("#text1").on("click",function(){
        alert("hellworl");
    });*/

    $.getUrlParam = function (name) {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
        var r = window.location.search.substr(1).match(reg);
        if (r != null) return unescape(r[2]); return null;
    }
    //获取全局数据
    console.log("href:"+window.location.search);// href:?keyword=%25E6%25B0%25A8%25E5%259F%25BA&categoryId=5
    var categoryId = $.getUrlParam('categoryId');
    var keyword=$.getUrlParam('keyword');
    console.log("name"+decodeURI(keyword)+" id:"+categoryId);});//name氨基 id:5

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值