`

WEB开发中,中文传参问题的解决办法

阅读更多

  因为我在jsp页面上对字符的编码方式都习惯用UTF-8, 所以本文用UTF-8格式做例子,其它编码方式(如常用的GBK,GB2312),只需要把UTF-8替换为相应编码方式。
(web.xml 和 server.xml 不用特意去改, 原本是怎样就直接用即可).

前台页面参数传递到后台程序的方式主要可分POST 和 GET,现在就从这两种方式讲:

一:POST方式:
用Filter解决: Tomcat 已经做了个例子, 直接拿来用。
在tomcat安装目录下的webapps\jsp-examples\WEB-INF\classes\filters\目录下有个SetCharacterEncodingFilter.java文件,把它复制到自己项目的\WEB-INF\classes\filters\里
它的源码类似以下:
//=========================================================
/*
 * 类名: SetCharacterEncodingFilter.java
 * 作者: qiujy
 * 版本: V1.0
 * 创建日期:2005-12-2
 *
 * Copyright 2006 qiujy All rights reserved.
 */
package com.xumh.common.util;
import javax.servlet.Filter;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import java.io.IOException;
/**
 * the filter for code
 */
public class SetCharacterEncodingFilter implements Filter {

 protected FilterConfig config = null;
 protected String encoding = null;
 protected boolean ignore = true;
 public SetCharacterEncodingFilter() {
  super();
 }
 public void destroy() {
  this.encoding = null;
  this.config = null;
 }
 public void doFilter(
  ServletRequest request,
  ServletResponse response,
  FilterChain chain)
  throws ServletException, IOException {
  if (this.ignore || request.getCharacterEncoding() == null) {
   request.setCharacterEncoding(this.encoding);
  }
  chain.doFilter(request, response);
 }
 public void init(FilterConfig config) {
  this.config = config;
  this.encoding = this.config.getInitParameter("encoding");
  String value = this.config.getInitParameter("ignore");
  if (value == null) {
   this.ignore = true;
  } else if (value.equalsIgnoreCase("true")) {
   this.ignore = true;
  } else {
   this.ignore = false;
  }
 }
}

//=========================================================

然后修改\WEB-INF\web.xml, 新增以下的

     <filter>
        <filter-name>SetCharacterEncoding</filter-name>
        <filter-class>filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
      <filter-name>SetCharacterEncoding</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>

 
提示: 如果多个项目都想用这个方法, 可以把filters\SetCharacterEncodingFilter.class 复制到{tomcat}\shared\classes里, 再修改{有需要用的项目}\WEB-INF\web.xml, 新增以上的几行即可。

二、GET方式:
修改tomcat安装目录下的conf\server.xml文件,找到 <Connector port=80 或 <Connector port="8080" 这行
在这个标签的中新增一句URIEncoding="UTF-8", 即<Connector port=8080 URIEncoding="UTF-8" ...略...>
其它照原来的,不用动。

这样, 用<form method="get">的话,直接接收就已经是中文了.

最后注意:如果编码为UTF-8且用link方式时,如
<a href="/mytest/test.jsp?str='中文'">test</a>
则接收到的str是正常的"中文"二字,若为
<a href="/mytest/test.jsp?str='中文字'">test</a>
则接收到的str是的"中文?",第三个字乱码。也就是说偶数个中文字是正常的,奇数个中文字最后一个会乱码,我也不知道为什么。(但是编码采用的是GBK或GB2312:则正常)

解决编码为UTF-8且用link方式时,就要先把中文部分先编码, 如
 <%String str = "中文";
    str = java.net.URLEncoder.encode(str,"UTF-8");
%>
<a href="/mytest/test.jsp?str=<%=str%>">test</a>
(注:若用javascrpit也可进行utf-8编码:encodeURIComponent("中文"))

接收到的中文字不管奇数个还是偶数个都正常了。。

这样, 基本上就解決了post和get的乱码问题。

另外. 在修改web.xml 和 server.xml后一定要记得重启Tomcat  

分享到:
评论

相关推荐

    javascript 传参中文乱码解决方案

    在进行Web开发时,经常会遇到中文字符在URL传输过程中出现乱码的问题。这主要是因为不同的系统、浏览器或服务器可能采用不同的编码方式处理URL中的参数,导致原本正常的中文字符变成无法识别的乱码。本文将详细介绍...

    JSP页面传参出现中文乱码的解决方案

    在开发Java Web应用程序时,尤其是使用JSP技术时,经常遇到的一个问题是中文字符在传递过程中出现乱码。这个问题主要是由于字符编码不一致导致的。在本文中,我们将深入探讨JSP页面传参出现中文乱码的原因,并提供...

    get中文传参(解码)

    在IT行业中,尤其是在Web开发领域,GET请求是HTTP协议中的一种常见方法,用于从服务器获取数据。当涉及到中文参数的传递时,由于编码问题,可能会出现乱码的情况。本篇文章将详细探讨“GET中文传参(解码)”这一...

    解决vs2012 “无法启动已配置的visual studio开发web服务器”的解决办法

    解决VS2012中“无法启动已配置的Visual Studio开发Web服务器”的解决办法 在Visual Studio 2012中,开发者可能会遇到“无法启动已配置的Visual Studio开发Web服务器”的错误,这是一个常见的问题。这个错误可能是...

    Java Web程序开发中字符乱码的原因与解决办法.pdf

    Java Web程序开发中字符乱码的原因与解决办法 字符乱码问题是Java Web程序开发过程中经常遇到的一个问题,它会对用户界面的友好性以及信息的准确传达造成很大的影响。为了解决这个问题,我们首先要了解字符集和字符...

    力控web发布常见问题解决办法

    力控web发布常见问题解决办法 Force Control Web 发布是当前许多企业和个人使用的一种常见的发布形式,但是在实际使用过程中,很多人都会遇到一些常见的问题,影响着发布的效率和质量。为了解决这些问题,本文将对...

    python web开发.pdf

    实验分为多个阶段,包括环境配置、Web应用开发、问题驱动开发、项目管理与审核、模块分割设计和单元测试等,每个阶段都有具体的操作要求和评估标准,旨在通过实践强化理论知识,提高学生的动手能力和问题解决能力。...

    web前端开发基本问题解决

    web标准中定义id与class有什么区别吗 如何垂直居中文本 如何对齐文本与文本输入筐 为什么FF下面不能水平居中呢 为什么FF下文本无法撑开容器的高度 为什么IE6下容器的宽度和FF解释不同呢 为什么web标准中IE无法设置...

    PowerBuilder 9.0 Web开发篇

    《PowerBuilder 9.0 Web开发篇》是“PowerBuilder 9.0应用开发丛书”中的一部分,由张涛编著。本系列丛书旨在全面介绍PowerBuilder 9.0在商业应用开发中的使用方法,特别是Web开发方面的技术。PowerBuilder自1991年...

    C++Http上传文件到web服务器,解决中文参数乱码

    在C++中,进行HTTP文件上传到Web服务器时,可能会遇到中文参数乱码的问题。这是因为HTTP协议本身并不处理字符编码,而是依赖于上层的应用层协议(如HTTP头或者POST数据)来处理字符集。当涉及到非ASCII字符,如中文...

    Python Web开发:测试驱动方法(中文扫描版)

    第二部分讨论了Web开发要素,探讨了Web开发过程中不可避免的问题,及如何通过测试解决这些问题。第三部分探讨了一些高级话题,如模拟技术、集成第三方插件、Ajax、测试固件、持续集成等。本书适合Web开发人员阅读。

    js直接调用exe传参

    在Web开发过程中,有时候我们需要从HTML页面通过JavaScript(简称JS)来调用本地的应用程序,并传递参数给这些应用程序。这种需求通常出现在需要与本地资源进行交互或者执行特定任务的情况下。 #### 关键技术与方法...

    java web开发中常遇到的问题

    在 Java Web 开发中,开发者经常会遇到一些棘手的问题,影响项目的进度和质量。在这篇文章中,我们将列举一些常见的问题,并对其进行解释和解决。 1. java.lang.IllegalArgumentException: node to traverse cannot...

    关于Java+Web技术开发中中文乱码问题的深入探讨.pdf

    中文乱码问题是 Java Web 技术开发中一个常见的问题,但通过配置 Tomcat 的编码方式、在 Java 代码中指定编码方式、使用 Unicode 字符等方法,可以解决这个问题。同时,统一编码方式、使用字符编码检测工具、学习 ...

    PythonWeb开发基础教程教案PDF版进店另有word版或PPT版.pdf

    每个章节都设有实验环节,比如创建"HelloWorld"项目、在IIS中部署项目以及实践URL分发等,这些实验旨在让学生通过动手实践巩固理论知识,提升解决问题的能力。 【教材与参考资料】 课程主要参考教材是夏帮贵编写的...

    海康威视WEB3开发包.zip

    4. **文档资料**:完整的开发文档是理解开发包功能和用法的重要参考资料,它可能包括了API参考、使用教程、常见问题解答等,帮助开发者在遇到问题时能够找到解决办法。 5. **兼容性**:Web3.0开发包通常会明确列出...

    SAP_ABAP_WebDynpro开发(中文)(官方文档)

    通过这个官方文档,SAP的目标是帮助开发者学习和掌握如何通过ABAP语言开发WebDynpro应用程序,并在SAP NetWeaver平台上实现业务解决方案。开发者应当结合实际业务需求和SAP开发的最佳实践,设计出既满足用户界面要求...

    个人开发中遇到常见问题及解决办法(吐血总结)

    2 java中double类型数据运算不精确问题的解决办法(采用java.math.BigDecimal类来进行精确计算。) 3 get方式传值乱码问题解决 4 查询被锁的数据,解锁 ,数据库连接数 5 下拉框的数据回显 6 mybatis批量更新,批量...

    python web开发实录源代码

    Python Web开发是现代互联网应用构建的重要技术之一,它利用Python语言的强大功能和丰富的库资源,结合Web框架,如Django、Flask等,快速构建高效、可扩展的Web应用程序。"Python Web开发实录源代码"是针对这一主题...

Global site tag (gtag.js) - Google Analytics