1

我正在尝试从带有特殊字符的文本框中获取一些用户输入值。但是当我得到它时,字符串会被特殊字符丢弃。

就像如果我传递输入:poly&&(mer@) 下面的代码将此字符串指定为:poly

HttpServletRequest request = ServletActionContext.getRequest();
        request.setCharacterEncoding("UTF-8");

        String text = (new String(request.getParameter("searchBarField")
                .getBytes("UTF-8")));

在我的 jsp 字符编码标签中是有的。请建议。

4

3 回答 3

3

我已经按如下方式解决了您的问题,并且效果很好..

我的 JSP 是index.jsp

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
        pageEncoding="ISO-8859-1" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <form action="GetParameter">
    Name:<input type="text" name="name">
    <br>
    <input type="submit" value="submit" />
    </form>
    </body>
    </html>

并按照我的 servlet 处理请求。

public class GetParameter extends HttpServlet {
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        String name = request.getParameter("name");
        PrintWriter out = response.getWriter();
        out.write("Name is " + name);

    }

希望它适用于您的代码....

于 2013-07-16T11:44:48.627 回答
2

您的应用程序服务器似乎未配置为支持 Unicode 字符。如果您使用的是 Tomcat 容器。在连接器中将 URIEncoding 设置为UTF-8

<Server port="8105" shutdown="SHUTDOWN">

 <Service name="Catalina">
    <Connector port="8180" URIEncoding="UTF-8" />
    <Engine name="Catalina" defaultHost="localhost">
        <Host name="localhost" appBase="webapps" />
    </Engine>
 </Service>
</Server>

设置request.setCharacterEncoding("UTF-8")并获取参数为:

String text=request.getParameter("searchBarField");

另一种方法是编写一个Filter处理您的网络应用程序的字符编码的方法。另请查看此SO Q&A

于 2013-07-16T09:10:35.473 回答
0

当您向服务器发送 HTTP 请求时,请确保您的 URL 先被编码(例如: Javascript 中的encodeURIComponent()):

    $.ajax({
    type: "GET",
    url: "/Server1/endpoint?serialnumber=" + encodeURIComponent(x),
    success: function(data, status){

    },
    error: function (jqXHR, exception) {

    }
});

}

在服务器端,它应该已经被解码:

String serialnumber = request.getParameter("serialnumber");
于 2019-01-29T18:20:46.147 回答