Request.getparameter从输入中丢弃特殊字符

时间:2013-07-16 09:03:05

标签: java jsp servlets

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

喜欢如果我传递输入:poly&&(mer @) 下面的代码将此字符串赋予:poly

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

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

在我的jsp中,字符编码标签就在那里。请建议。

3 个答案:

答案 0 :(得分: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来处理您的Web应用程序的字符编码。另请查看此SO Q&A

答案 1 :(得分:2)

我按照以下方式处理了您的问题,但效果很好..

我的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);

    }

希望它能与您的代码一起使用....

答案 2 :(得分: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");