用get方式提交請求的url帶有中文參數


又碰到JSP頁面中文亂碼問題,經過一次encodeURI處理后仍舊是亂碼,后來經過兩次encodeURI后正常顯示中文

以前也碰到過同樣的問題,沒深究,這次網上搜集了一些資料,記錄下來留做備份

_____________________________________________________

前端JS:

var name="中文";

var url = "demo.jsp?name=" +name;

url=encodeURI(url);

url=encodeURI(url); //寫一個不行。如果寫一個就是????號。
服務端獲取:

String name=request.getParameter("name");

name = java.net.URLDecoder.decode(name,"UTF-8");

System.out.println(name);

_____________________________________________________

因為Tomcat服務器會自動幫你做一次URLDecode,所以再加上你自己在代碼里面寫的URLDecode,一共就是兩個Decode了,既然要兩次Decode,當然就需要兩次Encode了。或許你會問,干脆只Encode一次,然后在java代碼里不Decode,呵呵,這個也是不行的,這其實也就是為什么要進行Encode的原因吧

 

--------------------------------------------------------------------------------------------------------

 

一般情況下, 發送 encodeURIComponent(parmeName)+"="+encodeURIComponent(parmeValue); 接收時, 直接 String paramValue = request.getParameter(paramName); // 容器自動解碼.
我們知道 encodeURIComponent 使用的是 UTF-8 編碼規則來編的. 如果 request.getParameter(paramName) 時,容器也按 UTF-8 解的話,是正確的. 根本無須在客戶端 進行二次的 encodeURIComponent(...)
如果 request.getParameter(paramName),容器沒有按 UTF-8 解的話, 結果只有一個,就是亂碼! 容器按什么編碼來解碼,決定於 request.setCharacterEncoding(***) 或者 服務器程序配置.
如果你在 jsp 程序中,能夠 request.setCharacterEncoding("UTF-8"), 並且 修改服務器配置,讓容器在解 GET 提交的參數時,使用 UTF-8.
客戶端提交前不用二次編碼, 接收時,也只要直接 request.getParameter(paramName) 即可
---------------------
為什么網上會有人提出在客戶端對字符串重復編碼兩次呢. 如果因為項目需要,不能指定容器使用何種編碼規則來解碼提交的參數, 比如:需要接收來自不同頁面,不地編碼的參數內容時。 (又或者是開發人員被這有點復雜的東東搞得暈頭轉向,不懂得如何正確的去做好這接收參數的工作) 這個時候,在客戶端對參數進行二次編碼,可以有效的避開


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM