锁定老帖子 主题:解决: js向后台传参数出现乱码
精华帖 (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方法, 解决乱码的方式是不一样的哈. |
|
返回顶楼 | |
发表时间:2010-08-04
最后修改:2010-08-04
看来应该是这样的,对于get请求,encode方法以UTF-8来编码字符,请求时这个UTF-8字符串会decode(,'UTF-8')就能得到相关字符,
对于POST请求,如果设置了解码方式,如request.setCharacterEncoding("UTF-8"),那么如果还用decode方法来解码的话前台就需要encode两次,实际上前台decode一次后台直接得到就可以用了不需要decode了 |
|
返回顶楼 | |
发表时间:2010-08-04
typeid = new String(request.getParameter("typeselect").getBytes("iso-8859-1"), "utf-8");
不写encodeURI,楼主试试行不行呢 |
|
返回顶楼 | |
发表时间: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的操作则可以,如果是别的编码我建议用第一种。 |
|
返回顶楼 | |
发表时间:2011-03-10
<script type="text/javascript" src="test.js?username=zhang&password=ddd"></script>
如何获取后边的参数呢? |
|
返回顶楼 | |