我在ajax POST请求中发送特殊字符时遇到问题,发送请求的servlet无法正确接收这些特殊字符。 Javascript代码:
myAjaxPostrequest=new GetXmlHttpObject();
var parameters1="content="+mainContent;
myAjaxPostrequest.open("POST", "controller", true);
myAjaxPostrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
myAjaxPostrequest.send(parameters1);
Servlet代码:
String lsContentToSave = aoReq.getParameter("content");
System.out.println(lsContentToSave);
aoReq
是HttpServletRequest对象。
例如。如果特殊字符为»
,则会打印»
我也尝试过jquery帖子,但仍面临同样的问题。请让我知道解决方法。
答案 0 :(得分:5)
您标记了jquery-ajax
,但您的问题中的JS代码无法识别为jQuery。你真的使用jQuery吗?这看起来更像是穷人w3schools教程的一部分。
无论如何,您需要在2个位置考虑字符编码。在客户端,当您对参数进行表单编码时,您应该使用encodeURIComponent()
。这将使用UTF-8来应用percent encoding。
var parameters = "content=" + encodeURIComponent(mainContent);
// ...
在服务器端,之前从请求正文中获取任何参数,您应该将请求编码设置为UTF-8,如下所示:
request.setCharacterEncoding("UTF-8");
// ...
String content = request.getParameter("content");
// ...
那就是说,如果你真的使用jQuery,那么你不必担心在客户端使用encodeURIComponent()
。如果您将$.post()
函数与数据对象一起使用,jQuery将为您处理所有内容。
$.post('controller', { 'content': mainContent}, function() {
// Callback function here.
});