更多課程 選擇中心
        Java培訓

        400-111-8989

        Java培訓 > Java問答庫  > 正文

        如何解決網頁傳值過程中文亂碼問題

        • 發布:達內
        • 來源:達內
        • 時間:2015-10-16 17:10

        解決中文亂碼問題
        網頁傳值主要有兩種情況:
        1、使用form表單傳值
            使用form表單傳值主要有兩種方式:get和post(即:method="get/post",默認是get方式)
            1)解決使用post方式傳遞中文的亂碼問題:
                方法一:
                <form action="login-handler.jsp" method="post"></form>
                在接收請求參數之前設置請求編碼即可,request.setCharacterEncoding("編碼");
                示例:
                <%
                    request.setCharacterEncoding("UTF-8");
                    String name = request.getParameter("name");
                    String pwd = request.getParameter("pwd");
                %>
                方法二:
                可以寫一個Filter過濾該項目下的所有請求編碼
                web.xml文件
                <filter>
                  <filter-name>charsetEncoding</filter-name>
                  <filter-class>com.lym.filter.CharsetEncodingFilter</filter-class>
                  <init-param>
                      <param-name>code</param-name>
                      <param-value>UTF-8</param-value>
                  </init-param>
               </filter>
               <filter-mapping>
                  <filter-name>charsetEncoding</filter-name>
                  <url-pattern>/*</url-pattern>
               </filter-mapping>
               CharsetEncodingFilter.java文件
               public class CharsetEncodingFilter implements Filter {
                  private static String CODE = "UTF-8";//默認編碼
                  public void destroy() {}
                  public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {
                      HttpServletRequest req = (HttpServletRequest)arg0;
                      HttpServletResponse resp = (HttpServletResponse)arg1;
                      req.setCharacterEncoding(CODE);
                      resp.setCharacterEncoding(CODE);
                      arg2.doFilter(arg0, arg1);
                 }
                 public void init(FilterConfig arg0) throws ServletException {
                     String code = arg0.getInitParameter("code");
                     if(!"".equals(code) && code!= null){
                         CODE = code;
                     }
                }
             }     
            2)解決使用get方式傳遞中文的亂碼問題:(兩種方法)
                <form action="login-handler.jsp" method="get"></form>
                方法一:
                    對接受到的請求參數進行轉碼,使用String name = new String(name.getBytes("默認編碼"),"轉換后的編碼");
                    <%
                        String name = request.getParameter("name");
                        name = new String(name.getBytes("ISO-8859-1"),"UTF-8");//將接收到的name參數的編碼轉換為UTF-8編碼
                    %>
                方法二:
                    客戶端用戶提交數據之前,使用JS把用戶要提交的中文值進行編碼,然后再服務器端對接收到的值進行解碼即可。
                    客戶端編碼:
                        <script>
                            function login(){
                                var loginForm = document.forms["loginForm"];
                                loginForm.name.value = encodeURI(loginForm.name.value);//對中文字符串進行編碼
                                return true;
                            }
                        </script>
                        <form action="login-handler.jsp" name="loginForm" method="get"></form>
                    服務端解碼:
                        <%
                            String name = request.getParameter("name");
                            name = URLDecoder.decode(name, "UTF-8");
                        %>
                         
                注意:使用encodeURI對字符串進行一次編碼,再提交表單時又對字符串進行了一次的編碼,實際進行了兩次編碼。
                       在使用URLDecoder.decode()進行解碼時,實際上是對字符串進行兩次解碼。
                    
        2、使用<a href=""></a>超鏈接的方式傳值
            使用JS對a標簽的href屬性值進行編碼,在對a標簽的href屬性值編碼時,要兩次編碼才能在服務端使用URLDecoder.decode()進行解碼。
            客戶端編碼:
                <script>
                    function a(){
                        var doc = document.getElementById("aa");
                        doc.href = "a-handler.jsp?info="+encodeURI(encodeURI("你好"));
                    }
                </script>
                <a href="" id="aa">使用超鏈接傳送中文參數</a>
            服務端解碼:
                <%
                    String user = request.getParameter("info");
                    user = URLDecoder.decode(user, "UTF-8");
                    out.println(user);
                %>

        預約申請免費試聽課

        填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

        上一篇:如何用servlet做簡單九九乘法
        下一篇:java語言中運算符=與==有何區別?
        非計算機專業能學Java軟件開發嗎?

        非計算機專業能學Java軟件開發嗎?

        現在學Java還有發展前途嗎?

        現在學Java還有發展前途嗎?

        轉行學Java有可能成為高薪大牛嗎?

        轉行學Java有可能成為高薪大牛嗎?

        想學好Java應該怎么學?

        想學好Java應該怎么學?

        • 掃碼領取資料

          回復關鍵字:視頻資料

          免費領取 達內課程視頻學習資料

        • 視頻學習QQ群

          添加QQ群:1143617948

          免費領取達內課程視頻學習資料

        Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

        選擇城市和中心
        貴州省

        福建省

        • 達內廈門軟件園中心
        廣西省

        海南省

        国产高清情侣视频2019年,限制电影福利在线观看,23伊人大香蕉 百度 好搜 搜狗
        <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>