论坛首页 Java企业应用论坛

解决: js向后台传参数出现乱码

浏览 12405 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-08-04  
smiky 写道
joycepro 写道
smiky 写道
joycepro 写道
smiky 写道
为什么要encode两次?吾是菜鸟,请解释一下嘛


看你后台用的是什么语言咯,如果是asp.net,那前端只需一次 escape ,后端一次解码即可。

如果是PHP, java,那前端需要两次encodeURI,因为一次encodeURI还有一些字符不会被编码。

我刚查到的说法是,对于php用$_get方法来获取数据,它会自动decode一次,所以要encode两次,
java也是这样吗?



通常都是使用request.getParameter("paramname")获取参数数据,在request对象得到的数据都是经过解码过的,而解码过程中程序里是无法指定的.有很多新手说用request.setCharacterEncoding("字符集")可以指定解码方式,其实是不可以的,看servlet的官方API说明有对此方法的解释:Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using getReader().
可以看出: 在doGet()方法中, 这样的方式是无能为力的。

明白什么情况了,request.setCharacterEncoding只对post方法有效,


好哈 ~
针对doGet和doPost方法, 解决乱码的方式是不一样的哈.
0 请登录后投票
   发表时间:2010-08-04   最后修改:2010-08-04
看来应该是这样的,对于get请求,encode方法以UTF-8来编码字符,请求时这个UTF-8字符串会decode(,'UTF-8')就能得到相关字符,
对于POST请求,如果设置了解码方式,如request.setCharacterEncoding("UTF-8"),那么如果还用decode方法来解码的话前台就需要encode两次,实际上前台decode一次后台直接得到就可以用了不需要decode了
0 请登录后投票
   发表时间:2010-08-04  
typeid = new String(request.getParameter("typeselect").getBytes("iso-8859-1"), "utf-8");
不写encodeURI,楼主试试行不行呢
1 请登录后投票
   发表时间:2010-08-05  
1.
  在url那里把参数用escape(escape(id)) 编码两层再
  Escape.unescape(request.getParameter("id")).
2.
  url = encodeURI(url);///需要两次转码
  java 中name = URLDecoder.decode(name,"utf-8");

js的转码有这两种,第二种我不建议用,如果你是utf-8的操作则可以,如果是别的编码我建议用第一种。
2 请登录后投票
   发表时间:2011-03-10  
<script type="text/javascript" src="test.js?username=zhang&password=ddd"></script>
如何获取后边的参数呢?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics