理解JavaScript編碼函數escape、encodeURI、encodeURIComponent

? ? 遇到的問題:

? ? 今天在對接銀行的一個鑒權接口時發現,后端接收到的參數出現很多空格,導致鑒權失敗。斷點前端ajax發現前端傳的參數沒有問題,但是服務端把前端傳參的“+”號全部變成空格。

? ? 分析問題:

? ? 為什么后端獲得的參數會變成空格?原因是:網頁在提交表單的時候,如果有空格,會將其都轉換為“+”字符。然后服務器處理數據時,會把“+”再處理成空格。而我在前端對參數進行編碼時,使用的編碼函數是encodeURI,這就導致了上述的問題。

? ? 為什么?:

? ? 首先,由于網絡標準的硬性規定,只有字母和數字、一些特殊符號$-_.+*'(),以及某些保留字,才可以不經過編碼直接用于URL。

? ? 那么如果要用到除以上規定之外的文字和符號(如:中文),就必須對其編碼后使用。

? ? 三種編碼函數:

? ? 1?escape

? ? escape相對久遠,已經不提倡使用了。它其實不能直接用于URL編碼,真正的作用是返回一個字符的Unicode值。

? ? 2?encodeURI

? ? encodeURI用于對整個URL進行編碼,但是它保留URL中有特殊含義的符號 ;/?:@&=+,#'? ? 并且輸入符號的utf-8形式,在每個字節前加上%

encode() 例子保留特殊符號

? ??注意:escape和encodeURI編碼函數都不對“+”號編碼,也就是說如果參數中有“+”號,并且使用它們進行編碼,ajax傳給后端處理時“+”號會變成空格!下面的函數可以解決這個問題。

? ? 3?encodeURIComponent

? ??encodeURIComponent函數可以將encodeURI中不被編碼的符號統統編碼。假如要傳遞帶&符號的網址,都要用encodeURIComponent

encodeURIComponent() 例子對特殊符號編碼

? ? 解決問題:

? ? 將前端編碼函數encodeURI改為encodeURIComponent即可。

參考文章:https://www.cnblogs.com/huaxingtianxia/p/7125862.html

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • js對文字進行編碼涉及3個函數:escape,encodeURI,encodeURIComponent,相應3個解...
    奔跑的兔子_閱讀 488評論 0 0
  • 今天,和一位老朋友打了一個半小時的電話,詢問近況。她得知我早上睡懶覺,一下子驚到了,你怎么精神狀態不太對嘛...
    隔水望伊人閱讀 876評論 0 51
  • 這個題目其實已經寫過,不過,還是愿意再回答一次。 謝霆鋒在《因為愛所以愛》這首歌中唱到, “不是為了什么回報,所以...
    文曉玲閱讀 624評論 9 23
  • “共贏”2字寫的容易想的也容易,但要運用到實際中,如果你沒有很好的溝通能力與及解決能力,想要做到雙方達成共識,很難...
    陳林夕1閱讀 584評論 0 0