最近在寫三期項目的時候,遇到一個問題,就是用js提交參數到后臺handler中的時候,用實體類接受的時候因為多個jsp頁面命名(name="")相同,導致后臺獲取的時候出現亂碼現象,關于這一現象,通過查詢得知可以使用 javaScript endcodeURI()函數解決。在頁面上進行兩次編碼操作,然后在后臺再進行一次解碼。
encodeURI() 函數可把字符串作為 URI 進行編碼。在js中通過定義name 和 pwd 來獲取屬性值:
var name = $("#uname").val();
var pwd = $("#upwd").val();
然后通過encodeURI() 函數進行兩次轉碼:
var uname = encodeURI(encodeURI(name));
var upwd = encodeURI(encodeURI(pwd));
再用get方法在地址欄上傳參到后臺:
$.get("user/numLogin?User_UserName="+uname+"&User_UserPassword="+upwd,function(data){
if(data){
alert("登錄成功!!!");
}else{
alert("用戶名或密碼錯誤!!!");
}
},"json");
在后臺用實體類接受后在進行一次轉換,再存進實體類中:
@RequestMapping("/numLogin")
@ResponseBody
public boolean doNumLogin(UserEntity user, HttpSession session) throws UnsupportedEncodingException{
String name = user.getUser_UserName();
user.setUser_UserName(URLDecoder.decode(name,"utf-8"));
String pwd = user.getUser_UserPassword();
user.setUser_UserPassword(URLDecoder.decode(pwd,"utf-8"));
user = userService.login(user);
session.setAttribute("loginUser", user);
if (user != null) {
return true;
}else {
return false;
}
}
然后,再后臺獲得的數據就是正常的中文utf-8字符了。
說明:
該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。
該方法的目的是對 URI 進行完整的編碼,因此對以下在 URI 中具有特殊含義的 ASCII 標點符號,encodeURI() 函數是不會進行轉義的:;/?:@&=+$,#
提示和注釋:
提示:如果 URI 組件中含有分隔符,比如 ? 和 #,則應當使用 encodeURIComponent() 方法分別對各組件進行編碼。
浙公網安備 33010602011771號