GET和POST参数乱码

当表单用get()方式请求时,表单内的数据参数是通过URL路径传送到Servlet的,浏览器的传送编码方式是可以调的,

老版本的tomcat的默认解码方式是iso-8859-1方式,iso-8859-1这种方式时不支持中文的,这时会出现乱码的问题,我们可以将变量再转码成utf-8这样就不会再乱码:

String roleIdNew = new String(roleId.getBytes("iso-8859-1"),"UTF-8");

这个时候就出现了另外的一个问题 我们现在的tomcat版本有的时候不是用iso-8859-1的作为默认的编码方式 有的会用utf-8  这个时候我们就不知道服务器到底是适用的那一种编码方式,这个时候我们最好的解决办法是:在页面就对要传输的变量做一下编码 然后在后台我们用就知道用哪种方式进行解码了

例如:

页面:

function saveRole(roleId,roleName,flag) {    var roleIdNew = encodeURI(encodeURI(roleId));    var title = "角色" + (flag==0?"新增":"修改");    var url = ‘/priv/goToAddRole.do?flag=‘+flag;    openDialog(350,300,‘new‘,title,flag==0?url:url+‘&roleId=‘+roleIdNew,‘‘);}

encodeURI方法是将变量编码成UTF-8的形式 然后我们在后台就可以用UTF-8再解码就行了

后台:

@RequestMapping("/goToAddRole.do")public ModelAndView goToAddRole() throws UnsupportedEncodingException {    ModelAndView mv = new ModelAndView("/newpages/priv/addRole");    String flag = request.getParameter("flag");//0:新增  1:修改    String roleId = request.getParameter("roleId");    if(StringUtil.isNotBlank(roleId)){        /*String roleIdNew = new String(roleId.getBytes("iso-8859-1"),"UTF-8");//中文乱码问题*/        String roleIdNew = URLDecoder.decode(roleId,"UTF-8");//中文乱码问题        mv.addObject("role",privRoleService.queryById(roleIdNew));    }    mv.addObject("flag",flag);    return mv;}

我们发现在页面上我们进行了两次encodeURI方法来编码 以为我们的数据传递到后台的时候 tomcat会默认解码一次 如果编码一次的的话 还是可能出现乱码的问题,所以我们编码两次 这样tomcat自动解码的时候就会自动抵消一次 我们再解码就是正确的了

所以说表单最好是用post方式提交,而且这个时候,表单元素的传递是在HTTP信的正文中传送到Servlet的,这样比较安全。在post方式的乱码问题中可以这样解决,如果你想在Servlet中有这样的操作String name=req.getParameter("hello");或者有这样的操作System.out.println(req.getParameter("hello"));总之就是不进行out.write()操作,就在getParameter()方法之前加上一句req.setCharacterEncoding("utf-8");但是这个方法就只作用在post的HTTP信的正文,并且要放在getParameter()方法之前,如果你进行out.write()操作出现乱码,这个就是服务器往浏览器写信的时候出现了乱码,这个时候在out.write()之前加上

response.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=utf-8");这两句话要配合使用。

(这一种方法是不推荐的,因为我们不可能去修改人家服务器上的编码方式,这个时候程序就会出错)其实还有一个比较全局的方法就是在服务器中进行配置,在Service的service.xml中的包含连接端口的那一句加上:

这一句就算是get方式的乱码也是能解决的。

在上传文件的时候,通常要知道真是路径,通常要知道上传到磁盘上的哪一个文件,这个时候就用:

req就是request,括号中参数就是项目当前目录下的test文件夹,结果就是:

时间: 2024-10-31 19:10:40

GET和POST参数乱码的相关文章

解决url中文参数乱码的问题--解码

<html> <body> <h3 class="projectName" id="projectName"></h3> <script type="text/javascript"> var unitID;    var unitName;    //获取参数的函数    function geturlPara()    {        var url = document.URL;

Request 接收参数乱码原理解析二:浏览器端编码原理

上一篇<Request 接收参数乱码原理解析一:服务器端解码原理>,分析了服务器端解码的过程,那么浏览器是根据什么编码的呢? 1. 浏览器解码 浏览器根据服务器页面响应Header中的“Content-Type: text/html; charset=gb2312”解码.修改web.config中“responseEncoding=utf-8”,发现服务器页面响应Header变成了“Content-Type: text/html; charset=utf8”. <system.web&g

http中 get方法 传送中文参数乱码解决办法

http传送参数有两种方法:get 和post  当时使用get方法传递中文参数是会有乱码现象 解决办法: 1.在jsp压面url后面的参数使用 encodeURI:"&zxbghy="+ encodeURI(zxbghy) 2.在后台java获取参数时使用字节数组:temphgdmhy = new String(hgdmhy.getBytes("ISO-8859-1"), "UTF-8");  案例,用get方法传递两个中文参数:zxb

js的url中传递中文参数乱码,如何获取url中参数问题

一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript”> function send(){ var url = "test01.html"; var userName = $("#userName").html(); window.open(encodeURI(url + "?userName="

Request 接收参数乱码原理解析一:服务器端解码原理

“Server.UrlDecode(Server.UrlEncode("北京")) == “北京””,先用UrlEncode编码然后用UrlDecode解码,这条语句永远为true吗?答案是否定的,结果可能与很多人预想的不大一样.本文主要分析这一问题出现的原理,研究下Server.UrlEncode(),Server.UrlDecode(),Request["xxx"]三个函数与编码方式的关系. 1. 问题出现的情景 网站采用了GB2312编码,在Web.confi

解决URL带中文参数乱码问题

通过配置Tomcat来解决URL代中文参数乱码的问题. 首先打开Tomcat安装目录 打开conf文件夹 打开server.xml,在大约65行的位置,加一个属性 URIEncoding="UTF-8" 这样就支持Url中文参数了.

jsp get参数乱码问题

摘自:username2.iteye.com/blog/1597917个人理解中文传送的时后需要转码: js代码: 要进行两次转码才不会出现乱码(默认为UTF-8) encodeURI(encodeURI(http://localhost/qq/index.jsp?title=专业)); java接收参数代码: String title = request.getParameter("title"); title = URLDecoder.decode(title, "UTF

JSP页面传递参数乱码问题整理

1.JSP页面之间传递中文参数乱码 (1).a.jsp中正常传递参数,b.jsp 中 <% String projectName = new String(request.getParameter("projectName").getBytes("ISO-8859-1"),"UTF-8"); %> <meta http-equiv="Content-Type" content="text/html;

java url中文参数乱码问题

http://www.blogjava.net/jerry-zhaoj/archive/2009/07/16/286993.html 转 JAVA 中URL链接中文参数乱码的处理方法JAVA 中URL链接中文参数乱码的处理方法 JAVA 中URL链接中文参数乱码的处理方法 在url中问参数乱码,我们已经在 "解决ajax提交中文.URL中文参数传递后的乱码问题的解决办法" 一张提出了一中解决办法, 网子是:http://www.javaly.cn/javahome/java/conte

spring mvc 中文参数乱码

最近做项目,springmvc的url中文参数乱码: 请求url: http://localhost:8080/supply/supply_list.htm?productName=测试&isHomePage= 在后端: @RequestMapping(value = SupplyURL.SUPPLY_LIST, method = RequestMethod.GET) public String toSupplyList (Model model, String productName) { P