在ajax post请求中发送特殊字符时发出问题

时间:2011-06-30 06:30:07

标签: java ajax servlets jquery

我在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帖子,但仍面临同样的问题。请让我知道解决方法。

1 个答案:

答案 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.
});