最近在寫三期項目的時候,遇到一個問題,就是用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() 方法分別對各組件進行編碼。