JS傳值中文亂碼解決方案
一、相關知識
1,Java相關類:
(1)java.net.URLDecoder類
HTML格式解碼的實用工具類,有一個靜態方法:public static String decode(String 變量名,String 編碼格式);給變量指定解碼。
(2)java.net.URLEncoder類
HTML格式編碼的實用工具類,有一個靜態方法:public static String encode(String 變量名,String 編碼格式);給變量指定編碼。
2,JavaScript的編碼函數:
encodeURI(String URIstring):把字符串作為 URI 進行編碼。
二、解決JS傳值中文亂碼
1,問題:
js在url中傳值,前台和后台編碼不一致,導致中文亂碼;
2,解決方案:
(1)方案一:
前台:js代碼使用encodeURI()函數:url = encodeURI(url);注意:這里是整個URL地址,也可以是具體亂碼變量。
后台:java代碼String linename = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
(2)方案二:
前台:jsp代碼對url使用兩次encodeURI()函數:url=encodeURI(encodeURI(url));//用了2次encodeURI
后台:java代碼使用java.net.URLDecoder.decode(String 變量,String 編碼);對指定變量解碼
三、示例
前台:
var yhdh = encodeURI(yhdh); top.Dialog.open({ URL : "user.do?ywtype=loadXq&type=update&user.yhdh=" +encodeURI(yhdh), //兩次使用encodeURI()函數(這是js函數)
后台:
try { String searchtext =java.net.URLDecoder.decode(userForm.getUser().getYhdh(),"UTF-8"); //進行解碼,會拋異常,直接捕獲即可。 userBean.setYhdh(searchtext); } catch (UnsupportedEncodingException e) { e.printStackTrace(); }