URL中加號(+)轉義問題
前端通過URL傳入一個參數,在后台日志中發現參數中的加號變成了空格。
前端傳入a+b
后台日志a b
可以看到,+ 變成了空格。
先說結論
HTTP為了避免歧義,一些字符傳入后台需要做轉義,例如:
" - %22
# - %23
% - %25
& - %26
+ - %2B
也就是說,+ 從前台傳到后台,應該轉換為 %2B
。
但是 + 作為 URL 參數時,會被瀏覽器自動轉換為空格(轉換機制不明,不知道瀏覽器為什么這么做)。
我們要做的很簡單,提前轉換一下,保證 + 被轉義成 %2B,這樣的話無論是通過 URL 傳,還是用 AJAX 傳值,都不可能出錯。
使用 encodeURIComponent
轉義的 js 代碼:
var s = encodeURIComponent('1+1');
console.log(s);
打開控制台查看輸出,+ 處理正確
1%2B1
順便一提,不要使用 encodeURI
函數,它不能正確轉義。
GET POST 表單提交的轉義
使用表單提交,無論是 GET 還是 POST,都會自動幫我們作出正確的轉義。