說明:encodeURIComponent() 函數可把字符串作為 URI 組件進行編碼。
維護項目中,遇到一個登錄的問題:(用戶的loginName為33195221,密碼為147258369+),在密碼正確的情況下登錄,顯示密碼錯誤。
於是翻看了代碼,看到了登錄請求的代碼為這樣的:
$("#login").click(function() { var userName = $("#userName").val(); var password = $("#password").val(); var url = basePath + '/user/user_login.do'; url = url + '?user.userName=' + userName + '&user.password=' + password; $.ajax({ url : url, dataType : 'json', type : "post", success : function(data) { if (data.resultStatus == 'ok') { window.location.href='index.html'; }else{ alert('登錄失敗'); } }, error : function() { alert("未能連接到服務器!"); } }); });
訪問的url:
看着沒問題,但是傳到后台后,明顯后面的特殊字符“+”號變成了空格,如下圖:
所以,登錄的時候就顯示密碼錯誤。
解決辦法:
像這種url中帶有特殊字符的情況下,就用encodeURIComponent() 函數,把要編碼的字符串傳進去,比如,剛開始的js代碼中的url關於密碼的那塊,可以這樣改:
url = url + '?user.userName=' + userName + '&user.password=' + encodeURIComponent(password);
這樣就不會把傳過去的特使字符“+”變為空格了。
注:encodeURIComponent不編碼字符有71個:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z