tomcat自动URLDecode解码问题(+号变空格)

tomcat自动URLDecode解码问题(+号变空格),第1张

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/字符解码时加号解码为空格问题探究/

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/588624.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存