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

Ank*_*kit 4 java ajax jquery servlets

我在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);
Run Code Online (Sandbox Code Playgroud)

Servlet代码:

String lsContentToSave = aoReq.getParameter("content");
System.out.println(lsContentToSave);
Run Code Online (Sandbox Code Playgroud)

aoReq 是HttpServletRequest对象.

例如.如果特殊字符是»打印»

我也试过jquery帖子,但仍面临同样的问题.请让我知道解决这个问题的方法.

Bal*_*usC 5

您已标记jquery-ajax,但您的问题中的JS代码无法识别为jQuery.你真的在使用jQuery吗?这看起来更像是穷人w3schools教程的一部分.

无论如何,您需要在2个位置考虑字符编码.在客户端,当您对参数进行表单编码时,您应该使用encodeURIComponent().这将使用UTF-8 应用百分比编码.

var parameters = "content=" + encodeURIComponent(mainContent);
// ...
Run Code Online (Sandbox Code Playgroud)

在服务器端,从请求主体获取任何参数之前,应将请求编码设置为UTF-8,如下所示:

request.setCharacterEncoding("UTF-8");
// ...

String content = request.getParameter("content");
// ...
Run Code Online (Sandbox Code Playgroud)

也就是说,如果你真的使用jQuery,那么你不必担心encodeURIComponent()在客户端使用.如果您正在使用$.post()带有数据对象的函数,jQuery将为您处理所有问题.

$.post('controller', { 'content': mainContent}, function() {
    // Callback function here.
});
Run Code Online (Sandbox Code Playgroud)