如何解决网页传值过程中文乱码问题
1个回答
展开全部
解决中文乱码问题
网页传值主要有两种情况:
1、使用form表单传值
使用form表单传值主要有两种方式:get和post(即:method="get/post",默认是get方式)
1)解决使用post方式传递中文的乱码问题:
方法一:
<formaction="login-handler.jsp"method="post"></form>
在接收请求参数之前设置请求编码即可,request.setCharacterEncoding("编码");
示例:
<%
request.setCharacterEncoding("UTF-8");
Stringname=request.getParameter("name");
Stringpwd=request.getParameter("pwd");
%>
方法二:
可以写一个Filter过滤该项目下的所有请求编码
web.xml文件
<filter>
<filter-name>charsetEncoding</filter-name>
<filter-class>com.lym.filter.CharsetEncodingFilter</filter-class>
<init-param>
<param-name>code</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charsetEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
CharsetEncodingFilter.java文件
publicclassCharsetEncodingFilterimplementsFilter{
privatestaticStringCODE="UTF-8";//默认编码
publicvoiddestroy(){}
publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,FilterChainarg2)throwsIOException,ServletException{
HttpServletRequestreq=(HttpServletRequest)arg0;
HttpServletResponseresp=(HttpServletResponse)arg1;
req.setCharacterEncoding(CODE);
resp.setCharacterEncoding(CODE);
arg2.doFilter(arg0,arg1);
}
publicvoidinit(FilterConfigarg0)throwsServletException{
Stringcode=arg0.getInitParameter("code");
if(!"".equals(code)&&code!=null){
CODE=code;
}
}
}
2)解决使用get方式传递中文的乱码问题:(两种方法)
<formaction="login-handler.jsp"method="get"></form>
方法一:
对接受到的请求参数进行转码,使用Stringname=newString(name.getBytes("默认编码"),"转换后的编码");
<%
Stringname=request.getParameter("name");
name=newString(name.getBytes("ISO-8859-1"),"UTF-8");//将接收到的name参数的编码转换为UTF-8编码
%>
方法二:
客户端用户提交数据之前,使用JS把用户要提交的中文值进行编码,然后再服务器端对接收到的值进行解码即可。
客户端编码:
<script>
functionlogin(){
varloginForm=document.forms["loginForm"];
loginForm.name.value=encodeURI(loginForm.name.value);//对中文字符串进行编码
returntrue;
}
</script>
<formaction="login-handler.jsp"name="loginForm"method="get"></form>
服务端解码:
<%
Stringname=request.getParameter("name");
name=URLDecoder.decode(name,"UTF-8");
%>
注意:使用encodeURI对字符串进行一次编码,再提交表单时又对字符串进行了一次的编码,实际进行了两次编码。
在使用URLDecoder.decode()进行解码时,实际上是对字符串进行两次解码。
2、使用<ahref=""></a>超链接的方式传值
使用JS对a标签的href属性值进行编码,在对a标签的href属性值编码时,要两次编码才能在服务端使用URLDecoder.decode()进行解码。
客户端编码:
<script>
functiona(){
vardoc=document.getElementById("aa");
doc.href="a-handler.jsp?info="+encodeURI(encodeURI("你好"));
}
</script>
<ahref=""id="aa">使用超链接传送中文参数</a>
服务端解码:
<%
Stringuser=request.getParameter("info");
user=URLDecoder.decode(user,"UTF-8");
out.println(user);
%>
网页传值主要有两种情况:
1、使用form表单传值
使用form表单传值主要有两种方式:get和post(即:method="get/post",默认是get方式)
1)解决使用post方式传递中文的乱码问题:
方法一:
<formaction="login-handler.jsp"method="post"></form>
在接收请求参数之前设置请求编码即可,request.setCharacterEncoding("编码");
示例:
<%
request.setCharacterEncoding("UTF-8");
Stringname=request.getParameter("name");
Stringpwd=request.getParameter("pwd");
%>
方法二:
可以写一个Filter过滤该项目下的所有请求编码
web.xml文件
<filter>
<filter-name>charsetEncoding</filter-name>
<filter-class>com.lym.filter.CharsetEncodingFilter</filter-class>
<init-param>
<param-name>code</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charsetEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
CharsetEncodingFilter.java文件
publicclassCharsetEncodingFilterimplementsFilter{
privatestaticStringCODE="UTF-8";//默认编码
publicvoiddestroy(){}
publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,FilterChainarg2)throwsIOException,ServletException{
HttpServletRequestreq=(HttpServletRequest)arg0;
HttpServletResponseresp=(HttpServletResponse)arg1;
req.setCharacterEncoding(CODE);
resp.setCharacterEncoding(CODE);
arg2.doFilter(arg0,arg1);
}
publicvoidinit(FilterConfigarg0)throwsServletException{
Stringcode=arg0.getInitParameter("code");
if(!"".equals(code)&&code!=null){
CODE=code;
}
}
}
2)解决使用get方式传递中文的乱码问题:(两种方法)
<formaction="login-handler.jsp"method="get"></form>
方法一:
对接受到的请求参数进行转码,使用Stringname=newString(name.getBytes("默认编码"),"转换后的编码");
<%
Stringname=request.getParameter("name");
name=newString(name.getBytes("ISO-8859-1"),"UTF-8");//将接收到的name参数的编码转换为UTF-8编码
%>
方法二:
客户端用户提交数据之前,使用JS把用户要提交的中文值进行编码,然后再服务器端对接收到的值进行解码即可。
客户端编码:
<script>
functionlogin(){
varloginForm=document.forms["loginForm"];
loginForm.name.value=encodeURI(loginForm.name.value);//对中文字符串进行编码
returntrue;
}
</script>
<formaction="login-handler.jsp"name="loginForm"method="get"></form>
服务端解码:
<%
Stringname=request.getParameter("name");
name=URLDecoder.decode(name,"UTF-8");
%>
注意:使用encodeURI对字符串进行一次编码,再提交表单时又对字符串进行了一次的编码,实际进行了两次编码。
在使用URLDecoder.decode()进行解码时,实际上是对字符串进行两次解码。
2、使用<ahref=""></a>超链接的方式传值
使用JS对a标签的href属性值进行编码,在对a标签的href属性值编码时,要两次编码才能在服务端使用URLDecoder.decode()进行解码。
客户端编码:
<script>
functiona(){
vardoc=document.getElementById("aa");
doc.href="a-handler.jsp?info="+encodeURI(encodeURI("你好"));
}
</script>
<ahref=""id="aa">使用超链接传送中文参数</a>
服务端解码:
<%
Stringuser=request.getParameter("info");
user=URLDecoder.decode(user,"UTF-8");
out.println(user);
%>