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/字符解碼時加號解碼為空格問題探究/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM