? ? 遇到的問題:
? ? 今天在對接銀行的一個(gè)鑒權(quán)接口時(shí)發(fā)現(xiàn)桶现,后端接收到的參數(shù)出現(xiàn)很多空格躲雅,導(dǎo)致鑒權(quán)失敗。斷點(diǎn)前端ajax發(fā)現(xiàn)前端傳的參數(shù)沒有問題骡和,但是服務(wù)端把前端傳參的“+”號全部變成空格相赁。
? ? 分析問題:
? ? 為什么后端獲得的參數(shù)會變成空格?原因是:網(wǎng)頁在提交表單的時(shí)候慰于,如果有空格钮科,會將其都轉(zhuǎn)換為“+”字符。然后服務(wù)器處理數(shù)據(jù)時(shí)婆赠,會把“+”再處理成空格绵脯。而我在前端對參數(shù)進(jìn)行編碼時(shí),使用的編碼函數(shù)是encodeURI休里,這就導(dǎo)致了上述的問題蛆挫。
? ? 為什么?:
? ? 首先妙黍,由于網(wǎng)絡(luò)標(biāo)準(zhǔn)的硬性規(guī)定悴侵,只有字母和數(shù)字、一些特殊符號$-_.+*'(),以及某些保留字拭嫁,才可以不經(jīng)過編碼直接用于URL可免。
? ? 那么如果要用到除以上規(guī)定之外的文字和符號(如:中文),就必須對其編碼后使用做粤。
? ? 三種編碼函數(shù):
? ? 1?escape
? ? escape相對久遠(yuǎn)巴元,已經(jīng)不提倡使用了。它其實(shí)不能直接用于URL編碼驮宴,真正的作用是返回一個(gè)字符的Unicode值。
? ? 2?encodeURI
? ? encodeURI用于對整個(gè)URL進(jìn)行編碼呕缭,但是它保留URL中有特殊含義的符號 ;/?:@&=+,#'? ? 并且輸入符號的utf-8形式堵泽,在每個(gè)字節(jié)前加上%
? ??注意:escape和encodeURI編碼函數(shù)都不對“+”號編碼,也就是說如果參數(shù)中有“+”號恢总,并且使用它們進(jìn)行編碼迎罗,ajax傳給后端處理時(shí)“+”號會變成空格!下面的函數(shù)可以解決這個(gè)問題片仿。
? ? 3?encodeURIComponent
? ??encodeURIComponent函數(shù)可以將encodeURI中不被編碼的符號統(tǒng)統(tǒng)編碼纹安。假如要傳遞帶&符號的網(wǎng)址,都要用encodeURIComponent
? ? 解決問題:
? ? 將前端編碼函數(shù)encodeURI改為encodeURIComponent即可。
參考文章:https://www.cnblogs.com/huaxingtianxia/p/7125862.html