在實際項目中,我們經常會遇到get方式進行參數傳遞,而前端到後臺,後臺調用第三方接口API,這裏往往涉及到很多編碼轉換的場景,前後端編碼方式不一致,tomcat服務端編碼設置,遠程API接口編碼不一致,多種方式都有可能在url傳輸的過程中涉及到傳遞的參數(尤其是特殊字符)在url請求上轉換不一致導致請求異常或者請求到不想要的東西。這裏就需要我們使用如下方式進行特殊字符的轉換:
1.轉義特殊字符
將特殊字符進行編碼轉義替換:
這裏一般是採用後端接口Vo層set方法進行replaceAll替換特殊字符,轉義替換爲不能被瀏覽器轉換的編碼格式:
+ (URL 中+號表示空格) ——> %2B
空格 (URL中的空格可以用+號或者編碼) ——> %20
/ (分隔目錄和子目錄) ——> %2F
? (分隔實際的URL和參數) ——> %3F
% (指定特殊字符) ——> %25
# (表示書籤) ——> %23
& (URL中指定的參數間的分隔符)——> %26
= (URL中指定參數的值)——> %3D
注:
HTTP協議中 + 號轉譯爲 %2B
HTTPS協議中 + 號轉譯爲 %20
2.使用POST方式進行提交
使用post進行restTemplate方式進行url參數方式提交,避免url在編碼上的轉換
3.sql語句中使用escape
escape語句如下,表示/後面的%不再作爲轉義字符,而是當做'%'這個字符來進行匹配:
select username from gg_user where username like '%xiao/%%' escape '/';
具體escape用法可以查看另一篇博文: