zoukankan      html  css  js  c++  java
  • (网络收集)彻底解决超链接提交中文乱码问题

    即便是把页面和项目的编码都统一设置为UTF-8,但由于tomcat的编码是ISO-8859-1,再处理中文URL时,还是会报错,这里最简单的办法,莫过于把tomcat的编码统一为UTF-8,即在server.xml中将如下的语句中添加最后一句,即:URIEncoding="UTF-8" 

    <Connector port="8080" maxHttpHeaderSize="8192"  
      maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  
      enableLookups="false" redirectPort="8443" acceptCount="100"  
      connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" /> 

    但是由于在tomcat编码是ISO-8859-1的情况下,form表单以post提交的action,并不会报中文乱码的错误。故可用js做如下转换: 

    <a href='./servlet/MyServlet?name=世界&id=1' onclick="return linkClick(this)">click me</a> <br>  

    如上有中文的超级链接,将其转化为一个form并且以post方式提交则也不会报错: 
    function linkClick(linkObject) {   
                   
        var formObject = document.createElement('form');   
        document.body.appendChild(formObject);   
         formObject.setAttribute('method', 'post');   
         var url = linkObject.href;   
         var uri = '';   
         var i = url.indexOf('?');   
                   
         if(i == -1) {   
            formObject.action = url;   
         } else {   
            formObject.action = url.substring(0, i);   
         }   
                   
         if( i >= 0 && url.length >= i + 1) {   
            uri = url.substring(i + 1, url.length);   
         }   
      
         var sa = uri.split('&');   
                   
         for(var i = 0; i < sa.length; i++) {   
           var isa = sa[i].split('=');         
           var inputObject = document.createElement('input');   
           inputObject.setAttribute('type', 'hidden');   
           inputObject.setAttribute('name', isa[0]);   
           inputObject.setAttribute('value', isa[1]);   
           formObject.appendChild(inputObject);   
         }   
                   
         formObject.submit();   
                   
         return false;   
    }  

    至于post提交中文不乱码而get提交中文会乱码.原因如下: 

    原来,get提交后是不会经过filter过滤的。如果要get提交中文不乱满,就在server.xml文件中Connector节点加上 URIEncoding="GBK",默认的如果没有URIEncoding的话,会使用ISO-8859-1的字符集的。还有一个方法是:tomcat的connector元素中另外提供了useBodyEncodingForURI参数,其值为boolean型,true代表使用处理body的encoding方法(即request.setCharacterEncoding)来处理URI的编码,这样就可以用一个过滤器来同时处理post和get方法了。 
    具体详见论坛帖子: 
    http://www.iteye.com/topic/187949 

    另外判断一个字符串是不是某种编码,可以用如下方式: 

             String encode = "ISO-8859-1";    
            try {    
                if (str.equals(new String(str.getBytes(encode), encode))) {    
                    String s1 = encode;    
                    return s1;    
                 }    
             } catch (Exception e) {    
                 e.printStackTrace(); 
             }    

    转码可用: 

    if(str!=null){ 
    try { 
    str=new String(str.getBytes("ISO-8859-1"),"UTF-8"); 
    } catch (UnsupportedEncodingException e) { 
    e.printStackTrace(); 


       

  • 相关阅读:
    状态压缩 + 暴力 HDOJ 4770 Lights Against Dudely
    简单几何(推公式) UVA 11646 Athletics Track
    简单几何(四边形形状) UVA 11800 Determine the Shape
    简单几何(求交点) UVA 11437 Triangle Fun
    计算几何模板
    简单几何(相对运动距离最值) UVA 11796 Dog Distance
    简单几何(求划分区域) LA 3263 That Nice Euler Circuit
    覆盖的面积 HDU
    Desert King 最小比率生成树 (好题)
    约会安排 (区间合并)毒瘤题
  • 原文地址:https://www.cnblogs.com/littleCode/p/3470755.html
Copyright © 2011-2022 走看看