Exception之The valid characters are defined in RFC 7230 and RFC 3986

程序部署到window上可以成功运行,但是部署到linux上报错。显示异常如下图:
这里写图片描述
根据研究,最终得出结果是因为跳转时的地址有问题。
所以如果遇到此异常,应该先研究即将跳转的地址是否有问题。

应该是window系统兼容这些错误,但是linux中对地址要求更为严格。
比如我目前遇到此异常的几种情况及相关解决方式。
1.上传时使用button和onclick

function upload(){
    var f=document.getElementById("file").value;
    var filepath=document.getElementById("file");
    var last=f.substr(f.length-4);
    if(last==".xls"){
        var form=document.getElementById("form");
        form.action="../ser/mastp.jsp?file="+filepath;
        form.submit();
    }else{
        alert('上传文件格式不正确');
    }
}

之前错误的地方是
form.action=”../ser/mastp.jsp?file=”+f;
传参数值是上传文件的地址,而传的参数值的正确形式应该是像代码段中所示,是file元素
2.地址中传参带有中文
地址中传递的参数含有中文也遇到了此异常。
将地址中的中文转码的方式:
进行url跳转时可以整体使用encodeURI
例如:Location.href=encodeURI(“http://cang.baidu.com/do/s?word=百度&ct=21”);
一开始遇到中文参数的时候,使用encodeURI()进行了一遍编码,传过去后,发现解码出现问题,解码后中文乱码。通过网上收索得出,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码,两位两位取出后进行解码,然后再传递给处理页面。因此,需要使用两次encodeURI方法,。
例如encodeURI(encodeURI(“中文”));
第一次是把中文编码成%XY的格式,
第二次是对%XY中的%进行编码,%编码成%25。
整个传参过程基本应该是:encodeURI(encodeURI(“中文”))编码后提交,把最后的编码结果%25XY在传递给处理页面的过程中,浏览器先将URL地址后解码成%XY,然后再把%XY传递给处理页面。
处理页面使用URLDecoder.decode(request.getParameter(“参数名”),”UTF-8”);完成解码。
总的来说就是:
1、汉字出现在URL路径部分的时候不需要编码解码;
2、传递中文参数需要先使用encodeURI进行2次编码;
3、处理参数时需要通过解码才能正确获取参数;

参考资料:https://zhidao.baidu.com/question/135227677105363645.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值