1. 程式人生 > >通過Ajax的post方式前端引數傳到後端與URLEncoder與URLDecoder編解碼問題

通過Ajax的post方式前端引數傳到後端與URLEncoder與URLDecoder編解碼問題

Ajax傳遞大量引數的時候是是以url的形式傳遞到後端的,即在url後面拼接問號加引數的格式拼成向後端訪問的引數。

在把請求引數給ajax之前一般會進行序列化:

例如var param = $('.queryForm').serialize();

然後,在Ajax裡data:param,把序列化的引數給ajax拼在url:url後面,組成新的url傳送到指定url的後端請求資料。

你在後端要獲取裡面的帶漢字的引數,發現一家被編碼成%加上16進位制字串形式了,。

確實,var param = $('.queryForm').serialize();已經把引數裡特殊字元按照URLEncoder的方式編碼了,

小在後端按照URLDecoder方式解碼出你要的引數。

String ss = "su.name=韓庚 su.age=12 su.class=A-*12_\tAA/tAA/nAA\nB&url=su/bol\\sole\\\\my.html?pass=bidd&sid=ui19280989890";

System.out.println(URLEncoder.encode(ss,"utf-8"));

//輸出:su.name%3D%E9%9F%A9%E5%BA%9A+su.age%3D12+su.class%3DA-*12_%09AA%2FtAA%2FnAA%0AB%26url%3Dsu%2Fbol%5Csole%5C%5Cmy.html%3Fpass%3Dbidd%26sid%3Dui19280989890

重要說明:URLEncoder.encode(str,"編碼"),URLDecoder.decode(str,"編碼");

前端encode與後端decode編碼一直,才能解析出正常的引數

encode特殊字串總結對照表:
  = 編碼後 %3D
   (空格)編碼後+(加號)
   漢字編碼後:一串百分號拼上16進位制數格式的字元
   *(星號)編碼後不變
   .(點)編碼後不變
   &編碼後%26
   /(斜槓)編碼後%2F
   \(反斜槓)編碼後%5C
   \t編碼後%09
   /t編碼後不變
   /n編碼後不變
   \n編碼後%0A
   ?編碼後%3F

   !編碼後%21

  (編碼後%28

   )編碼後%29

    #編碼後%23

   %編碼後%25

注意:區別於經過escape()方法編碼:escape()編碼空格變成%20