get提交時中文傳值亂碼的問題
url=curWarnList.action paramBean.bsIndex=1¶mBean.siteName=蕭山A基站,href連接提交其實是get提交方式,會造成中文亂碼。
這個主要是編碼方式不統一。JSP(手動設置)、Java(字符串是unicode編碼)、操作系統、、數據庫()、Tomcat等等,各種不同環境介質都有不同的編碼方式,如果編碼方式不統一,就會造成亂碼。
url參數中文是以ISO8859-1的編碼方式傳遞(url是通過web容器處理的,而tomcat默認的編碼方式ISO8859-1),struts的編碼方式是UTF-8,如果jsp頁面,myeclipse、web.xml中org.springframework.web.filter.CharacterEncodingFilter,都是UTF-8編碼,直接傳中文一般是不會亂碼的,如果再有亂碼。....
對於POST方式,表單中的參數值對是通過request body發送給服務器,此時瀏覽器會根據網頁的meta標簽中的content="text/html; charset=UTF-8"中指定的編碼進行對表單中的數據進行編碼,然后發給服務器,在服務器端的程序中我們可以通過request.setCharacterEncoding("charset")方式(JSP代碼) 設置編碼,然后通過request.getParameter獲得正確的數據。所以使用Post提交數據,編碼方式就是我們可以控制的了。Post表單的Html一般寫法如下:
<form action="test.jsp" method="post">
id:<input type="text" name="id"/>
name:<input type="text" name="name"/>
<input type="submit" value="發送"/>
</form>
目前收集到4中方法,中文傳參一documentPath為例:
1.改為form方式提交,不用超鏈接方式提交,用form方式傳參指定不亂碼。
2.
使用Get方式提交數據,瀏覽器會對URL進行URL encode,然后發送給服務器,不同的瀏覽器可能會有不同的編碼方式,因此發送之前需要使用JavaScript對參數進行統一編碼,比較麻煩
通過encodeURI(encodeURI(checkText))提交,java代碼中用URLDecoder.decode解碼:
<script>
function download(documentPath){
var url = "<c:url value='/product/download.action documentPath='/$amp;>quot;$+documentPath;
url = encodeURI(encodeURI(url));
window.location.href=url;
}
</script>
java代碼中取中文:
String documentPath = (String) request.getParameter('documentPath');
documentPath = URLDecoder.decode(documentPath,"utf-8");
3.修改tomcat的server.xml中的connector,添加URLEncoding="UTF-8"
4.中文從java中傳到jsp再通過url傳到java:
java中編碼:URLEncoder.encode(URLEncoder.encode("傳遞的中文","utf-8"));
java中解碼碼:URLDecoder.decode(request.getParameter('documentPath'),"utf-8");
或者
request.setCharacterEncoding("UTF-8"); //java代碼中這樣設置一下,將請求編碼改為utf-8,但是只對post方式有效
String path= request.getParameter("documentPath");
String method = request.getMethod(); //獲取提交方式
if(method!=null && "GET".equals(method)){ //如果是get的方式的話
path= new String(path.getBytes("ISO8859-1"), "UTF-8");
}
5.配置過濾器,但配置過濾器也一般適用於post提交