博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(网络收集)彻底解决超链接提交中文乱码问题
阅读量:5074 次
发布时间:2019-06-12

本文共 2109 字,大约阅读时间需要 7 分钟。

即便是把页面和项目的编码都统一设置为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' οnclick="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(); 
   

转载于:https://www.cnblogs.com/littleCode/p/3470755.html

你可能感兴趣的文章
NYOJ-613//HDU-1176-免费馅饼,数字三角形的兄弟~~
查看>>
graphite custom functions
查看>>
一个自己写的判断2个相同对象的属性值差异的工具类
查看>>
oracle连接的三个配置文件(转)
查看>>
Python内置函数(29)——help
查看>>
Android TextView加上阴影效果
查看>>
《梦断代码》读书笔记(三)
查看>>
Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作
查看>>
AngularJS学习篇(一)
查看>>
关于Xshell无法连接centos6.4的问题
查看>>
pig自定义UDF
查看>>
spring security 11种过滤器介绍
查看>>
代码实现导航栏分割线
查看>>
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
luogu4849 寻找宝藏 (cdq分治+dp)
查看>>
关于源程序到可运行程序的过程
查看>>
C# Async与Await的使用
查看>>
Mysql性能调优
查看>>
iOS基础-UIKit框架-多控制器管理-实例:qq界面框架
查看>>
自定义tabbar(纯代码)
查看>>