Web开发时遇到的传值乱码问题

传值乱码问题在Web开发中涉及许多方面:

登陆注册时,是否正确得到正确的中文用户名;

修改信息时,是否可以显示提交的中文信息;

以上是具体使用,当然包括所有后台想得到值的 文本框 的传值!!

可以看到输入中文是我们在做一个网站时必须要考虑的,纯英文的外国网站你输入中文也不会乱码。

其实,解决乱码我们只需要注意几个问题,再加之少许操作即可获得想要的中文

首先,一个Web工程项目中代码涉及编码的地方有几处:

你的struts.xml配置文件中开头会有一句:<?xml version="1.0" encoding="GBK" ?>

然后,文本框所在的jsp页面的开头也会有一句:<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

好像这就是所涉及到编码的所有部分了,如果我们只是改变一下"GBK","UTF-8"等等字眼,估计随便怎么换也是乱码

我们需要进一步的进行“再编码”!!

下面的解决方式面对两种问题,至今我只遇到了这两种,即两种后台得到值的方式“

标准的form表单提交,后台用get和set得到文本框的值;

大量重复操作的跳转(比如页面中一个表格里每一行后面有一个删除按钮),直接href=action后挂相应的值进行传递

First,标准form表单提交

1.把显示的jsp页面的第一句话写为:pageEncoding="UTF-8",GBK是不行的,对于struts可以忽视

2.在后台Java代码中的业务处理部分,

如果你的get和set没有在.java中,你总要通过getParameter("xxx");来获取值即:

如果get与set在其中,则可以直接用,不用getParameter

要做的操作:String xxx = request.getParameter("xxx");之后加一句 xxx = URLDecoder.decode(username , "utf-8");  //关键代码,所需包会自动添加

get与set同你的处理代码在一起的,就在excute()里第一次出现xxx的前面添加:xxx = URLDecoder.decode(username , "utf-8"); 

First-End


Second,用href=action传值

首先,要改写,不要用href,改为点击触发一个js的function(),比如:

<input name="in" value="<%p++(构造了一个id值)%>"....href="xx.action?id=p ">单传非中文是没有问题的,但是中文就要改一下,先要执行一个js:

<input name="in" value="<%p++(构造了一个id值)%>"....οnclick=”look('p')“>添加完onclick属性后,再添加代码:

function look( str ){ //在js中首先进行两侧编码,注意是两次,查阅所有网上资料都可以发现,至于为什么,功力未到还不能搞懂

var faultAddr = encodeURI(encodeURI(str));  //需要通过两次编码    

window.location.href="xxx.action?id="+str; 

}

这相当于在页面传值的时候进行了编码,在后java中得到的是编码两次的变量,所以要进行一次解码,添加:

xxx = URLDecoder.decode(xxx, "utf-8");  //关键代码,添加位置同First所述

Second-End


新手上路,还请指正

具体实例

在“input.jsp”页面中,需要通过js将值传递到后台,后台根据传递的值进行数据查询时,

通过test.jsp的js进行编码(粉色为编码),后台java解码(绿色为解码部分),可以解决

<input.jsp>

      <script type="text/javascript" charset="UTF-8">
           function test()
           {
                var faultAddr = encodeURI(document.getElementById("faultAddr").value);
                faultAddr = encodeURI(faultAddr);  //需要通过两次编码
                window.frames["listframe"].location.href ="queryorderList.action?faultAddr=" + faultAddr ;
           }
      </script>
       ……
      <tr>      <td height="5%" width="50">输入内容</td>
                <td><input id="faultAddr" maxlength="300" size="10" name="faultAddr" type="text" value=""/></td>
      </tr>
<java代码>
      import java.net.URLDecoder;
      String faultAddr =request.getParameter("faultAddr");
      try{
            faultAddr = URLDecoder.decode(faultAddr , "utf-8");
      }catch(Exception e){
            e.printStackTrace();
      }

到此为止【EVERYTHING IS OVER IN THE END】





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值