JSP的get方式乱码问题
2018-01-14 10:42
267 查看
JSP页面get方式传递参数,Javascript方法处理进行编码,Servlet后台处理解决中文及特殊符号乱码问题
地址栏中出现汉字的情况有两种,一种是汉字出现在URL的路径部分,一种是汉字出现在URL的传参的部分,第二种情况的时候必须采用编码后传参,接受时解码的方式完成传参。
总结:
1、汉字出现在URL路径部分的时候不需要编码解码;
2、使用encodeURI进行2次编码;
3、在openModelDialog()打开的模式窗体里没办法用request.getParameter正确获取参数;
客户端和服务器在传递数据时可以用过滤器filter解决字符编码问题,但filter只能解决post方式提交的数据。对于get方式,可以使用两次encodeURI(encodeURI(“中文”))并在服务器中使用URLDecoder.decode(“中文”, “UTF-8”);
今天用Ajax校验数据时也遇到这个问题,尽管页面、类和web容器都统一了字符编码,提交的数据依然是乱码,所以就采用了2次encodeURI()编码方式,乱码问题就解决了。
方案一:
1、使用encodeURI,两次编码:
javascript端加密中文:
servlet端取中文:
2、使用encodeURIComponent 两次编码
javascript端加密中文:
servlet端取中文:
方案二:
使用servlet过滤器,在包中新建类ParameterEncodingFilter,添加代码:
配置web.xml文件
servlet端取中文:
function f(){ window.location.href="<%=request.getContextPath() %>/ChineseServlet ?username="+encodeURIComponent(encodeURIComponent('中文#@$^&*=-+_')); }
public class ChineseServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); String uname =request.getParameter("username"); String us = URLDecoder.decode(uname, "utf-8"); response.getWriter().println(us); } catch (Exception e) { e.printStackTrace(); } } }
地址栏中出现汉字的情况有两种,一种是汉字出现在URL的路径部分,一种是汉字出现在URL的传参的部分,第二种情况的时候必须采用编码后传参,接受时解码的方式完成传参。
总结:
1、汉字出现在URL路径部分的时候不需要编码解码;
2、使用encodeURI进行2次编码;
3、在openModelDialog()打开的模式窗体里没办法用request.getParameter正确获取参数;
客户端和服务器在传递数据时可以用过滤器filter解决字符编码问题,但filter只能解决post方式提交的数据。对于get方式,可以使用两次encodeURI(encodeURI(“中文”))并在服务器中使用URLDecoder.decode(“中文”, “UTF-8”);
今天用Ajax校验数据时也遇到这个问题,尽管页面、类和web容器都统一了字符编码,提交的数据依然是乱码,所以就采用了2次encodeURI()编码方式,乱码问题就解决了。
js var name=document.myForm.username.value; //此处也可以直接对整个url进行编码 var url="Ajax.do?method=check&name="+encodeURI(encodeURI(name)); xmlHttp.open("GET",url,true); action String name = request.getParameter("name"); name = URLDecoder.decode(name, "UTF-8"); //servlet返回数据时,将字符编码设置为utf-8就可以了,因为Ajax只支持utf-8 response.setContentType("text/xml;charset=utf-8"); PrintWriter out = response.getWriter(); out.print(result);
方案一:
1、使用encodeURI,两次编码:
javascript端加密中文:
<script> function download(documentPath){ var url = "<c:url value='/product/download.action ?documentPath='/>"+documentPath; url = encodeURI(encodeURI(url)); window.location.href=url; } </script>
servlet端取中文:
String documentPath = (String) request.getParameter('documentPath'); documentPath = URLDecoder.decode(documentPath,"utf-8");
2、使用encodeURIComponent 两次编码
javascript端加密中文:
<script> content=encodeURIComponent(encodeURIComponent(content)); ?method=doPublishBlog&content="+content; </script>
servlet端取中文:
String content=(String)request.getParameter("content"); content=URLDecoder.decode(content,"UTF-8");
方案二:
使用servlet过滤器,在包中新建类ParameterEncodingFilter,添加代码:
public class ParameterEncodingFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); chain.doFilter(request, response); // 访问下一个filter类,执行完所有的filter再去执行页面。 } public void init(FilterConfig config) { } public void destroy() { } }
配置web.xml文件
<filter> <filter-name>FormFilter</filter-name> <filter-class>com.hwc.a.servlet.ParameterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>FormFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
servlet端取中文:
String paramName= new String(request.getParameter("paramName") .getBytes("ISO-8859-1"), "UTF-8");
相关文章推荐
- Jsp 中get方式传递参数乱码问题
- Jsp 中get方式传递参数乱码问题
- JSP中解决中文乱码问题 对于post有效 对于get请求方式无效。
- JSP解决ajax使用$.get()方式提交中文出现乱码问题
- jsp get方式请求参数中包含中文乱码问题解决
- 解决jsp用get方式通过a标签传值时的乱码问题
- JSP的get方式中文乱码问题
- Jsp以get方式提交中文及特殊字符,javascript处理乱码问题
- 在JSP中,解决get提交方式出现乱码的问题
- 解决表单get方式提交时的中文乱码问题
- java中form以post、get方式提交数据中文乱码问题总结(转)
- 一个Download.jsp文件 (采用文件流读写方式。可以防止doc.excl等文件打开时乱码问题)
- GET方式传递中文参数乱码的问题
- JSP中URL中文乱码问题!get提交时,服务器端乱码,url带中文参数乱码
- Jspget传参数乱码问题
- jsp页面中include静态html出现乱码问题的解决方式
- get和post方式提交乱码问题
- JS通过get、post向jsp传递中文出现乱码的问题的解决
- 三种方式--JS/JSP/EL 解决在JSP中获取cookie中文乱码的问题
- jsp servlet 乱码处理方法-表单提交的 pos 和get 方式