解決輸入的全角漢字或者日文在URl中亂碼的問題。以下我的實現
JSP代碼:
- function shiborikomuFw() {
- var url = '${url08}';
- var str = document.getElementsByName('fw');
- //Str str = document.getElementsById('fw').Value;
- for (var i = 0; i < str.length; i++) {
- url = url + "&fw=" + encodeURI(str[i].value);
- }
- window.location.href = url;
- }
JAVA代碼:
- String fw = (String) form.fw;
- if (fw != null && !"".equals(fw)) {
- try {
- fw = new String(fw.getBytes("ISO-8859-1"),"UTF-8");
- // fw = java.net.URLDecoder.decode(fw, "UTF-8");
- form.fw = fw;
- } catch (Exception e) {}
- }
這樣就解決問題了,在其他情況下也會有亂碼,以下轉自網絡的各種解決方法。做個記號,方便大家查閱。
方法一:
- http://xxx.do?ptname='我是中國人'
- String strPtname = request.getParameter("ptname");
- strPtname = new String(strPtname.getBytes("ISO-8859-1"), "UTF-8");
方法二:
- <%@ page contentType="text/html;charset=gb2312" %>
- <a href="ds.jsp?url=<%=java.net.URLEncoder.encode("編碼的是這裏","GB2312")%>">點擊這裏</a>
- <%
- //request.setCharacterEncoding("GBK");
- if(request.getParameter("url")!=null)
- {
- str=request.getParameter("url");
- str=java.net.URLDecoder.decode(str,"GB2312");
- str=new String(str.getBytes("ISO-8859-1"));
- out.print(str);
- }
- %>
- ==================================
- public String chinatoString(String str)
- {
- String s=str;
- try
- {
- byte tempB[]=s.getBytes("ISO-8859-1");
- s=new String(tempB);
- return s;
- }
- catch(Exception e)
- {
- return s;
- }
- }
- ====================================================
- function URLencode(sStr)
- {
- return escape(sStr).
- replace(//+/g, '%2B').
- replace(//"/g,'%22').
- replace(//'/g, '%27').
- replace(////g,'%2F');
- }
方法三:
如果用jstl的話,可以自己寫一個el的function,調用URLEncoder.encode來編碼。
IE缺省對URL後面的參數是不編碼發送的,但是tomat缺省是按ISO8859-1來進行URL解碼,因此纔會出現上述錯誤。好的做法是:
1、在URL參數中確保用UTF-8編碼之,方法可以用js函數encodeURI(),或調用自定義的el function;
2、設置server.xml中的Connector熟悉URIEncoding="UTF-8",確保解碼格式與編碼格式統一;
方法四:
- <script>
- for(var i=0;i<document.links.length;i++){
- document.links[i].href=encodeURI(document.links[i].href);
- }
- </script>
- 在action中,String s=request.getParameter("s");
- s=new String(s.getBytes("iso-8859-1"),"gbk");
四種方法應該都沒問題,我已經測試過了。