zoukankan      html  css  js  c++  java
  • tomcat自动URLDecode解码问题(+号变空格)

    最近项目中出现一个问题,就是前段调后端接口,参数带+号,传到后端后+号自动URLDecode成空格了。

    1.问题排查

    条件:tomcat配置server.xml有URIEncoding="UTF-8"

    1.1get请求、post请求(参数跟在URL的后面),request.getParameter("token")中token会被自动URLDecode。而request.getQueryString()获得的值则是浏览器传的原值。
    如果有中文,浏览器会自动转义,谷歌浏览器在view source上可以看到浏览器往后端传之前的参数值。

    1.2post请求(参数在body里面),request.getQueryString()值为空, request.getParameter("token")中token不会被自动URLDecode,而且中文乱码。
    加上

        request.setCharacterEncoding("UTF-8");
    

    后,中文不乱码,但是token也不会自动URLDecode。
    1.3去掉tomcat配置的URIEncoding="UTF-8",在1.1情况下token参数也会被自动URLDecode,此时采用tomcat默认的编码方式。

    2.深入tomcat解析

    3.临时解决方案

    1.如果发现+号编码了,那么解码一下
    2.如果发现uss有空格,说明+号被URLDecode成空格,那么URLEncode一下就变成原来的值

                // 1.如果发现+号编码了,那么解码一下
                if (uss.contains("%2b") || uss.contains("%2B")) {
                    uss = URLDecoder.decode(uss, "UTF-8");
                }
                // 2.如果发现uss有空格,说明+号被URLDecode成空格,那么URLEncode一下就变成原来的值
                if (uss.contains(" ")) {
                    uss = URLEncoder.encode(uss, "UTF-8");
                }    
    

    参考博客:
    https://blog.csdn.net/vickyway/article/details/46375971
    https://muchstudy.com/2017/12/06/字符解码时加号解码为空格问题探究/

  • 相关阅读:
    JSON
    什么是Jsonp?
    用border做三角形
    前端模块化
    Web 前端
    前端性能优化
    Ajax的原理
    node.js基础语法
    【真·新手初篇】菜鸟们都戳进来看看(欢迎大神指导)
    2019.11.20 开启一天的工作
  • 原文地址:https://www.cnblogs.com/zhanxiaoyun/p/9483639.html
Copyright © 2011-2022 走看看