论坛首页 Web前端技术论坛

AJAX中文乱码解决

浏览 39672 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (9)
作者 正文
   发表时间:2009-08-24  
   以下是我的AJAX中文乱码的解决方案:

客户端对url进行两次转码:(str可能是中文)
...
var url = 'policy.do?method=searchSuggest&word=' + str+"&now="+new Date().getTime();
url = encodeURI(url);
url = encodeURI(url);
...


服务器段对参数值进行解码:

...
String word = request.getParameter("word");
word = java.net.URLDecoder.decode(word,"UTF-8");
...
   发表时间:2009-08-24  
你这样传值就不是一个好办法,不如编码后再传,用urlencode
0 请登录后投票
   发表时间:2009-08-24  
编码后再传?  可以代码体现下吗?
0 请登录后投票
   发表时间:2009-08-24  
文件编码=数据库编码=输出编码=网页编码
0 请登录后投票
   发表时间:2009-08-25   最后修改:2009-08-25

还可以利用js进行HEX加密,java解密.

怎么不能删除留言啊,一不小心点错了,又要被扣分..
0 请登录后投票
   发表时间:2009-08-25  
java_mike 写道
   以下是我的AJAX中文乱码的解决方案:

客户端对url进行两次转码:(str可能是中文)
...
var url = 'policy.do?method=searchSuggest&word=' + str+"&now="+new Date().getTime();
url = encodeURI(url);
url = encodeURI(url);
...


服务器段对参数值进行解码:

...
String word = request.getParameter("word");
word = java.net.URLDecoder.decode(word,"UTF-8");
...

奇怪,为什么要endodeURI两次呢?
1 请登录后投票
   发表时间:2009-08-25  
我也不是很清楚,一次不行! 
0 请登录后投票
   发表时间:2009-08-25  
java_mike 写道
我也不是很清楚,一次不行! 

request.getParameter做的怪。。。
要是使用struts2的自动类型转换就不用encodeURI两次了
0 请登录后投票
   发表时间:2009-08-25  
java_mike 写道
   以下是我的AJAX中文乱码的解决方案:

客户端对url进行两次转码:(str可能是中文)
...
var url = 'policy.do?method=searchSuggest&word=' + str+"&now="+new Date().getTime();
url = encodeURI(url);
url = encodeURI(url);
...


服务器段对参数值进行解码:

...
String word = request.getParameter("word");
word = java.net.URLDecoder.decode(word,"UTF-8");
...


 

 

 

 String word = request.getParameter("word");
word = java.net.URLDecoder.decode(word,"UTF-8");

其实这一步是可以简化的。有这么几种做法,很常见:

 

1.客户端提交时使用encodeURI或者encodeurIcompent参数来进行utf-8编码,然后发送给服务器,如果使用post方式的话可以通过request.setCharacterEncoding来设定用来解读参数的编码。如果用get方式的话,使用new String(arg.getBytes("iso-8859-1"),"utf-8")的方式来转码。

 

2.发送ajax请求时,请使用post方式,由于AJAX默认使用utf-8的编码提交参数,因此如果不是文件上传得话,为ajax的Content-Type请求头设置"application/x-www-form-urlencoded;charset="utf-8",以此来通知服务器,客户端发送参数所使用的编码。这样,服务器端可以直接通过String word = request.getParameter("word");来获取经过转码后的参数值,省去了request.setCharacterEncoding。

以上是我的理解,不知道是不是有错的地方,欢迎拍砖

 

7 请登录后投票
   发表时间:2009-08-25  
学习了......
0 请登录后投票
论坛首页 Web前端技术版

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