原文地址:https://cloud.tencent.com/developer/article/1334736
前台用url傳值中文,后台用request.getParameter接收參數。在Firefox,Chrome等瀏覽器中沒有問題。但用IE瀏覽器就又會出現參數中文亂碼現象。 IE、Firefox、Chrome瀏覽器對URL的處理各不相同,瀏覽器在傳輸URl時得對URL進行編碼,IE默認是以UTF-8來傳輸 的,Firefox肯定不是以UTF-8來編碼,有可能是以ISO-8859-1來編碼的,而Chrome好像是采用的GBK來編碼。 如果不對中文參數進行處理,那么中文字符經各個瀏覽器以自己的編碼方式傳輸到服務器后就出現了各種編碼方式,而服務器卻只能以一種編碼方式來對接收到的URL進行解碼。這樣的話和服務器使用的編碼方式一樣的瀏覽器在使用帶中文的URl時不會出現問題,其他的瀏覽器則會出現問題。
解決方法:
我們可以在參數傳遞之前,我們自己先進行編碼,在獲取參數時,我們再進行解碼。這樣就可以得到我們想要的中文參數了,而且很好的處理了不同瀏覽器中兼容性問題!
具體實例:
JSP頁:
var newUrl = "checkLogin/lessonClassList?userName=張三"; newUrl = encodeURI(newUrl);//編碼 $("#dg").datagrid("options").url=newUrl; $("#dg").datagrid("reload");
JAVA后台:
String name = request.getParameter("userName"); String u_name = java.net.URLDecoder.decode(name, "UTF-8");// 解碼 u_name = new String(u_name.getBytes("iso-8859-1"), "utf-8");
這樣我們得到的u_name就是正常的中文參數了,很好的處理了在不同瀏覽器的兼容性!