`
dengquanhao
  • 浏览: 26249 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

(网络收集)彻底解决超链接提交中文乱码问题

阅读更多
即便是把页面和项目的编码都统一设置为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();
}
}
   
分享到:
评论

相关推荐

    html 中文乱码 HTML超链接中文乱码问题分析及解决方法

    Vm中一个超链接URL需要拼接中文作为Get请求的参数。如果直接拼接,传到后台Action的参数对象中后取出会是乱码,需要编码后再拼接到URL上。 解决方法是在Action中添加一个成员变量,保存编码后的中文参数。在vm页面...

    HTML超链接中文乱码问题分析及解决方法.docx

    本文将分析超链接中文乱码问题的成因和解决方法。 问题分析 在 HTML 超链接中,当我们需要将中文参数作为 GET 请求的参数时,直接拼接中文参数到 URL 上可能会导致乱码。例如,在一个超链接 URL 中,我们需要将...

    乱码问题的解决

    "乱码问题的解决" 在 Web 开发中,乱码问题是常见的难题之一。乱码问题的出现主要是由于编码不一致引起的。编码不一致可能出现在多个方面,如页面编码、服务器编码、客户端编码、数据库编码等。在本文中,我们将...

    JS中页面与页面之间超链接跳转中文乱码问题的解决办法

    在JavaScript中进行页面与页面之间的超链接跳转时,如果链接中包含中文字符,很可能会遇到中文乱码的问题。这种现象通常发生在URL传递过程中,服务器...通过系统地检查和配置,可以彻底解决页面跳转中的中文乱码问题。

    jsp超链接中文乱码的解决方法

    ### jsp超链接中文乱码的解决方法 在开发基于JSP(Java Server Pages)的Web应用程序时,可能会遇到一个常见的问题:超链接中的中文字符显示为乱码。这一问题通常发生在用户尝试通过包含中文字符的URL进行页面跳转...

    Struts2.0解决中文乱码

    本文将深入探讨如何在Struts2.0中解决中文乱码问题,确保应用程序能够正确地处理和显示中文字符。 ### Struts2.0中文乱码问题分析 #### 1. 表单提交中文乱码 在Web应用中,表单是用户与服务器交互的主要方式之一...

    asp乱码解决大全

    asp乱码解决大全,解决各种asp乱码问题

    ubuntu下添加windows字体解决latex中文乱码问题.docx

    "Ubuntu 下添加 Windows 字体解决 LaTeX 中文乱码问题" 在 Ubuntu 操作系统中,添加 Windows 字体可以解决 LaTeX 中文乱码问题。该问题的出现是因为 Ubuntu 缺乏中文字体,导致 LaTeX 无法正确显示中文字符。解决这...

    超链接传值不显示中文

    4. **异常处理**:添加异常处理逻辑,以便于出现问题时能够及时发现并解决问题。 5. **测试验证**:进行充分的测试验证,确保在各种情况下都能正常工作。 #### 四、总结 通过上述分析和解决方案,我们可以有效地...

    解决Servlet中文乱码问题.docx

    以下是一份详细的指南,涵盖了如何解决Servlet中的中文乱码问题。 **一、出现乱码的原因** 当浏览器向服务器发送请求或接收服务器返回的数据时,如果编码格式不统一,就会导致乱码。默认情况下,Servlet容器(如...

    修复office超链接问题

    因此,恢复IE到默认设置是解决问题的一种常见尝试,但并不总是有效,因为有些恶意软件会隐藏得更深,不会被简单的重置操作清除。 在这种情况下,修复的关键在于检查和修复注册表。注册表是Windows操作系统中存储...

    OUTLOOK内容中的超链接打不开解决办法

    此外,在解决问题时,用户也可以尝试重建 OL 配置档或者重建用户本地帐户文件,但是这两种方法可能无法解决问题,因为它们不能解决系统性错误。如果用户想要解决问题,需要更改系统设置工具的配置,或者卸载浏览器...

    excel文件 超链接修复器

    "Excel文件超链接修复器"就是为了解决这个问题而设计的。这个程序由VB6.0编写,VB6(Visual Basic 6.0)是微软公司推出的一种面向对象的编程语言,它在创建桌面应用程序方面非常强大。 首先,我们需要理解超链接在...

    Servlet中文乱码问题解决方案解析

    Servlet中文乱码问题解决方案解析 Servlet中文乱码问题是指在使用Servlet开发Web应用程序时,出现的中文字符乱码问题的解决方案。这种问题的出现是由于浏览器和Servlet之间的编码不一致所致。在本文中,我们将详细...

    JAVA开发中各种中文乱码问题

    5. **超链接中的中文问题**:在超链接中包含中文字符时,即使在web.xml中设置了字符集转换的Filter,Servlet仍然可能接收到乱码。这是因为URL编码默认使用的是UTF-8,而不是GBK。需要手动对URL参数进行编码和解码。 ...

    解决中文乱码的几种解决方法(推荐)

    解决中文乱码的问题是中文用户在使用计算机系统、网络以及各种编程语言中经常遇到的麻烦。由于中文字符集的特殊性,如果在数据传输或存储过程中处理不当,就会出现乱码问题。中文乱码主要发生在数据编码和解码的过程...

    RichTextBox控件扩展支持中文超链接

    然而,原生的`RichTextBox`控件并不直接支持中文字符作为超链接,这对于处理中文内容的应用来说是一个限制。本篇文章将详细探讨如何扩展`RichTextBox`控件,使其能够支持中文超链接,并实现点击后跳转至指定链接地址...

Global site tag (gtag.js) - Google Analytics