前台页面utf-8,通过url传中文参数的解决方法

本文转载自http://tujunlan.iteye.com/blog/1918173

由于前台jsp页面用到ajax,默认使用utf8编码格式,但另一个链接中又需要通过url传含有中文的参数,jboss中的server.xml中配置的urlEncoding是GBK(由于项目原因不能更改),故在原始写法的传参过程中,中文会变成乱码,以下提供解决这种乱码的方法。
对于url要传的中文参数进行两次编码(注意是两次),即encodeURI(encodeURI(val))

传到后台action中通过解码获取中文数:java.net.URLDecoder.decode(request.getParameter(“val”),”UTF-8”)

以下再记录几个解决乱码的方法(网上摘抄):
Java代码

一、对传递过来的参数进行编码转换  

  key=new String(key.getBytes("ISO-8859-1"),"UTF-8");  

其中ISO-8859-1是tomcat默认的编码类型  

缺点:当服务器的编码改成GBK  该方法就会失去作用 当然改成  

key=new String(key.getBytes("GBK"),"UTF-8");  

二、修改服务器(tomcat的编码)  

server.xml  

<Connector port="8080" protocol="HTTP/1.1"  

               connectionTimeout="20000"  

               redirectPort="8443"  

URLEncoding=UTF8 />  



缺点:当tomcat编码进行修改 又会出现问题  

一、 二、共同的缺点就是依赖于Tomcat的编码环境  

三、先将中文进行编码后再传递(推荐)  

   1、Js方式:  

      需要进行两次编码  

客户端  

          Var key=encodeURI(”中中”);  

                   Key= encodeURI(key);  

服务器端  

                   因为服务器端在获取客户端传递过来的参数时已经进行了一次解码 所以我们自己只需解一次码就行了  

                   java.net.URLDecoder.decode(传过来的参数);  

   2、利用Struts2的<s:a>标签  

<s:a action=””>  

<s:param name="key" value="%{@java.net.URLEncoder@encode(key, 'utf-8')}"></s:param>  

</s:a>  

Sturst2默认不允许直接用OGNL表达式调用方法  所以需要在Struts.Xml加入  

<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值