? ? 遇到的問題:
? ? 今天在對接銀行的一個鑒權接口時發現,后端接收到的參數出現很多空格,導致鑒權失敗。斷點前端ajax發現前端傳的參數沒有問題,但是服務端把前端傳參的“+”號全部變成空格。
? ? 分析問題:
? ? 為什么后端獲得的參數會變成空格?原因是:網頁在提交表單的時候,如果有空格,會將其都轉換為“+”字符。然后服務器處理數據時,會把“+”再處理成空格。而我在前端對參數進行編碼時,使用的編碼函數是encodeURI,這就導致了上述的問題。
? ? 為什么?:
? ? 首先,由于網絡標準的硬性規定,只有字母和數字、一些特殊符號$-_.+*'(),以及某些保留字,才可以不經過編碼直接用于URL。
? ? 那么如果要用到除以上規定之外的文字和符號(如:中文),就必須對其編碼后使用。
? ? 三種編碼函數:
? ? 1?escape
? ? escape相對久遠,已經不提倡使用了。它其實不能直接用于URL編碼,真正的作用是返回一個字符的Unicode值。
? ? 2?encodeURI
? ? encodeURI用于對整個URL進行編碼,但是它保留URL中有特殊含義的符號 ;/?:@&=+,#'? ? 并且輸入符號的utf-8形式,在每個字節前加上%
? ??注意:escape和encodeURI編碼函數都不對“+”號編碼,也就是說如果參數中有“+”號,并且使用它們進行編碼,ajax傳給后端處理時“+”號會變成空格!下面的函數可以解決這個問題。
? ? 3?encodeURIComponent
? ??encodeURIComponent函數可以將encodeURI中不被編碼的符號統統編碼。假如要傳遞帶&符號的網址,都要用encodeURIComponent
? ? 解決問題:
? ? 將前端編碼函數encodeURI改為encodeURIComponent即可。
參考文章:https://www.cnblogs.com/huaxingtianxia/p/7125862.html