中华考试网·阅读新闻
编程开发 > JSP > 文章内容

JSP编程教程:表单提交中文乱码

2015-5-5编辑:ljnbset
表单提交中文乱码

对于表单的数据可以使用request.getParameter(“”)的方法获取,但是当表单中出现中文数据的时候就会出现乱码。

示例代码如下

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%> 

 

     

     

    

   

    "2"

        下面是表单内容: 

      
"AcceptFormCharset.jsp" method="post"

        用户名:"text" name="userName" size="10"/> 

        密 码:"password" name="password" size="10"/> 

        "submit" value="提交"

        

     

   

在上面的表单当中想AcceptFormCharset这个页面提价两项数据,下面是AcceptFormCharset.jsp的内容:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<%@ page language="java" import="java.util.*" 

  contentType="text/html;charset=gb2312"%> 

 

   

     

   

   

    "2"> 下面是表单提交以后用request取到的表单数据:
 

      <% 

        String userName = request.getParameter("userName"); 

        String password = request.getParameter("password"); 

        out.println("表单输入userName的值:" + userName + "
"
); 

        out.println("表单输入password的值:" + password + "
"
); 

       %>  

     

   

在上面的程序中,如果表单输入没有中文,则可以正常的显示当输入的数据中有中文的时候,得到的结果如图所示。

产生种结果的原因是Tomcat中对于post方法提交的表单采用的默认编码为ISO-8859-1,而这种编码格式不支持中文字符。对于这个问题可以采用转换编码格式的方法来解决,现在对AcceptFromCharset这个页面改动如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<%@ page language="java" import="java.util.*" 

  contentType="text/html;charset=gb2312"%> 

 

   

     

   

   

    "2"> 下面是表单提交以后用request取到的表单数据:
 

      <% 

        String userName = request.getParameter("userName"); 

        String password = request.getParameter("password"); 

        out.println("表单输入userName的值:" + new String(userName.getBytes("ISO-8859-1"), "gb2312")+ "
"
); 

        out.println("表单输入password的值:" + new String(password.getBytes("ISO-8859-1"), "gb2312")+ "
"
); 

       %>  

     

   

经过这样的转换编码以后,所有的中文输入都可以用request对象正常取出。在上面这个程序中,第四行和第五行是转换编码格式的关键,先从ISO-8859-1格式的字符串中取出字节内容,然后在用GB2312的编码格式重新构造一个新的字符串。这样就可以支持中文变淡输入的正常取值和显示。改进以后程序运行结果如下

经过上面的更改编码格式的处理,表单的中文输入乱码问题已经得到解决。但是如果上面的表单中的输入项不止是两个,那么每个输入项都需要进行编码转换,那样就很麻烦了。这是我们就用到了大名鼎鼎的过滤器filter了。关于这里的内容大致的思虑和上面的一样具体做法请参照笔者的另一篇文章

ASP编码教程:ASP中限制某些字符留言评论
咨询热线:4000-525-585(免长途费)