`
浪子回头.小人物
  • 浏览: 10820 次
  • 性别: Icon_minigender_2
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

url 中文传参乱码

url 
阅读更多
问题:前台用url传值中文,后台用request.getParameter接收参数。
用firfox,chrome等没有问题。用ie会出现接参乱码现象。


   IE、Firefox、Opera三种浏览器对URL的传输的处理各不相同,浏览器在传输URl时得对URL进行编码,IE默认是以UTF-8来传输的,Opera可能也是以UTF-8编码的,Firefox经过测试肯定不是以UTF-8来编码的,有可能是以ISO-8859-1来编码的。所以如果不对中文进行处理,那么中文字符经各个浏览器以自己的编码方式传输到服务器后就出现了各种编码方式,而服务器却只能以一种编码方式来对接收到的URL进行解码。这样的话,和服务器使用的编码方式一样的浏览器在使用带中文的URl时不会出现问题,其他的浏览器则会出现问题。
  所以解决的办法就是在URL进行传输之前对其中的中文进行编码,使用的编码是和服务器一样的编码,假设服务器使用的编码是UTF-8,则编码语句如下:URLEncoder.encode("中文","UTF-8")。这样对中文进行编码后所有的浏览器都不会再用他们默认的编码方式对中文进行编码,因为此时浏览器看到的已经不是中文了,而是编码后的字节码。这样就避开了浏览器传输URL时编码的差异性问题。
  对中文参数问题的解决方式和上面一样。但这里所指的中文参数是指以?name="中文参数"方式附在URL后,以get方法传输到服务器的这种形式,并不是以表单形式提交到服务器的。各浏览器对中文参数的处理方式和各自对URL中中文的处理方式都不相同,各浏览器之间也有差异,有的在传输之前不进行编码,有的在传输之前就已经进行了编码,情形非常复杂。
  但是我们以不变应万变,都用URLEncoder.encode("中文","UTF-8")对中文参数进行编码,这样不管各浏览器怎样对中文参数进行处理,此时经过我们编码后的中文对浏览器来说就是字节码,与a、b、c等字母没有什么区别。但是服务器会用UTF-8编码形式来还原中文参数。
   再有,就是在后台进行转码。

点击后打开新页面,用户登录!用户名为中文时,火狐、google浏览器无问题,但IE有乱码问题:
问题代码:
Html代码 
<a href="member!sysLogin.do?name='${member.uname }'" target="_blank" />登录</a>  

  超链接形式的传参,都是Get方式!

Java代码 
public String sysLogin(){  
    try{  
        name=new String(name.getBytes("iso-8859-1"),"utf-8");  
        int r  = this.memberManager.loginbysys(name);  
        if(r==1){  
            return "syslogin";  
        }  
        this.msgs.add("登录失败");  
          
    }catch(RuntimeException e){  
        this.msgs.add(e.getMessage());            
    } catch (UnsupportedEncodingException e) {  
        this.msgs.add(e.getMessage());            
    }  
    return this.MESSAGE;  
}  


修改成功:
Html代码 
<a href="javascript:toSysLogin('${member.uname }');"  />登录</a>  
  
function toSysLogin(name){  
    var uriname="member!sysLogin.do?name="+name;  
    window.open( encodeURI(uriname));  
}  


Java代码 
  public String sysLogin(String name){  
        try{  
          name =java.net.URLDecoder.decode(name, "UTF-8");// 此处转码  
            name=new String(name.getBytes("iso-8859-1"),"utf-8");  
          int r  = this.memberManager.loginbysys(name);  
            if(r==1){  
                return "syslogin";  
            }  
            this.msgs.add("登录失败");  
              
        }catch(RuntimeException e){  
            this.msgs.add(e.getMessage());            
        } catch (UnsupportedEncodingException e) {  
            this.msgs.add(e.getMessage());            
        }  
        return this.MESSAGE;  
    }  

问题解决!
encode编码
decode解码


这里有个全的。。

JAVA 中URL链接中文参数乱码的若干处理方法,现在整理收录如下:

方法一:

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");
分享到:
评论

相关推荐

    url地址传参中文乱码处理

    "URL地址传参中文乱码处理" URL地址传参中文乱码处理是指在Web应用程序中,将中文参数传递给服务器时,可能出现乱码的情况。这种情况可能是由于编码问题或Tomcat服务器的配置问题引起的。 在处理URL地址传参中文...

    asp.net中URL参数传值中文乱码的三种解决办法

    在ASP.NET开发过程中,我们时常会遇到URL参数传递中文字符时出现乱码的问题。这个问题主要源于字符编码不一致导致的,下面将详细讲解三种解决这个问题的方法。 ### 方法一:设置Web.config配置 在ASP.NET应用的`...

    java URL中文参数乱码处理

    js 中乱码处理法方式 encodeURIComponent(encodeURIComponent(customerAddress)) decodeURIComponent(customerName) js到java encodeURI(url) String qijuType= new String(request.getParameter( (...

    JSP struts2 url传参中文乱码解决办法.docx

    在开发Java Web应用程序时,尤其是使用Struts2框架与JSP进行交互时,可能会遇到URL传参中文乱码的问题。这个问题通常涉及到字符编码的设置,包括客户端请求编码、服务器接收编码以及应用程序内部处理编码的统一。...

    解决页面传参中文乱码

    ### 解决页面传参中文乱码 在Web开发过程中,特别是在使用Java进行后端开发时,经常遇到的一个问题是中文字符或非ASCII字符在URL参数中的乱码问题。这主要是因为客户端浏览器与服务器之间可能使用的字符集不同导致...

    url 编码 js url传参中文乱码解决方案

    在Web开发过程中,使用JavaScript在URL中传递参数时,常常会遇到中文乱码的问题。这主要是因为URL和HTTP协议都是基于ASCII字符集设计的,而中文字符不在ASCII字符集范围内。因此,当参数中包含中文或特殊字符时,...

    get方式传参中文乱码问题的解决方案

    ### get方式传参中文乱码问题的解决方案 在Web开发中,经常遇到GET请求传递中文参数时出现乱码的问题。这种现象通常出现在不同编码格式之间的转换过程中,导致浏览器或者服务器端解析参数时出现问题。本文将深入...

    javascript 传参中文乱码解决方案

    ### JavaScript 传参中文乱码解决方案 在进行Web开发时,经常会遇到中文字符在URL传输过程中出现乱码的问题。这主要是因为不同的系统、浏览器或服务器可能采用不同的编码方式处理URL中的参数,导致原本正常的中文...

    JSP struts2 url传参中文乱码解决办法

    JSP struts2 url传参中文乱码解决办法 1.设置struts.xml 或是设置struts.properties(我自己没试过) struts.i18n.encoding=UTF-8 2.在web.xml添加编码过滤器 &lt;filter&gt;characterEncodingFilter &lt;filter&gt;org....

    Jsp页面在URL中传递参数会出现乱码问题解决

    在Web开发中,尤其是使用Java JSP技术时,我们可能会遇到URL中传递参数出现乱码的问题。这是因为不同的字符集编码方式可能导致字符在传输过程中无法正确解析。本文将详细介绍两种解决JSP页面URL参数乱码的方法,虽然...

    乱码问题的解决

    post 方法传参乱码是由于服务器是不解析的,请求体是直接封装在 request 对象里面的。解决方法是设置 request 的编码,可以改变 post 参数的编码。 三、解决方法 1. 设置页面编码 设置页面编码为 utf-8,以便正确...

    jsp传参 servlet接收中文乱码问题的解决方法.docx

    jsp 传参 servlet 接收中文乱码问题的解决方法 jsp 传参 servlet 接收中文乱码问题是一个经常遇到的问题,特别是在使用 Hibernate+Servlet 框架时。当我们在 jsp 页面传参到 servlet 时,中文字符经常会出现乱码...

    jquery获取URL中参数解决中文乱码问题的两种方法

    当我们需要在两个页面间通过URL传递参数时,经常会遇到中文乱码问题。这个问题主要是因为URL中的参数可能没有经过正确的编码和解码处理。为了解决这个问题,我们可以采取一些方法,特别是当使用jQuery来获取URL参数...

    get中文传参(解码)

    本篇文章将详细探讨“GET中文传参(解码)”这一主题,以及如何正确处理中文字符在URL中的传输。 首先,我们需要理解编码和解码的概念。编码是将可读的字符转换为二进制表示的过程,而解码则是将二进制数据还原为...

    j2ee13:jsp02,request对象,中文乱码处理,url传参

    总之,`request`对象在J2EE开发中扮演着核心角色,处理中文乱码和URL传参是日常工作中常遇到的问题。了解和掌握这些知识点,将使你在Web开发中更加得心应手。通过不断的实践和学习,你将能够更好地应对各种复杂情况...

    Ajax传参是乱码解决方案

    本文将详细介绍几种常见的解决Ajax传参乱码的方法,并通过具体的示例代码来帮助大家理解和掌握。 #### 一、理解乱码产生的原因 在讨论解决方案之前,我们需要先了解乱码产生的根本原因。乱码通常是因为字符编码不...

    奇数个中文字符url传递乱码

    当URL中包含奇数个中文字符时,可能会出现乱码的情况,这不仅会影响用户体验,还可能导致程序逻辑错误。本文将深入探讨“奇数个中文字符URL传递乱码”的问题,并提供一种可行的解决方案。 ### 一、问题背景 #### ...

    jsp页面传参乱码的解决方法

    本文将详细介绍如何解决JSP页面传参乱码的问题。 首先,我们需要了解JSP页面与服务器之间的通信机制。通常,当用户在JSP页面上填写表单并提交时,数据通过HTTP请求发送到服务器。这些请求参数默认使用ASCII编码。...

Global site tag (gtag.js) - Google Analytics