最近項目中出現一個問題,就是前段調後端接口,參數帶+號,傳到後端後+號自動URLDecode成空格了。java
條件: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,並且中文亂碼。
加上tomcat
request.setCharacterEncoding("UTF-8");
後,中文不亂碼,可是token也不會自動URLDecode。
1.3去掉tomcat配置的URIEncoding="UTF-8",在1.1狀況下token參數也會被自動URLDecode,此時採用tomcat默認的編碼方式。post
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/%E5%AD%97%E7%AC%A6%E8%A7%A3%E7%A0%81%E6%97%B6%E5%8A%A0%E5%8F%B7%E8%A7%A3%E7%A0%81%E4%B8%BA%E7%A9%BA%E6%A0%BC%E9%97%AE%E9%A2%98%E6%8E%A2%E7%A9%B6/.net