AJAX POST提交中文乱码解决(jsp)

寒冬腊月19898

寒冬腊月19898

2016-02-19 20:36

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是AJAX POST提交中文乱码解决(jsp),一起来学习了解下吧!

今天终于解决了AJAX的中文乱码问题,写篇文章来帮助一下有同样问题的朋友们。我的开发环境:XP, eclipse,使用GB18030编码。

当遇到这个问题时,到网上去查了好多文章,提到几种解决方案,如:全站UTF-8编码;请求头编码为中文;使用javascript中的escape函数。

使用GET方式提交数据的时候,中文问题很好解决,setrequestheader("Content-Type","text/html; encoding=gb18030")就可以了。但这个方法在POST方式中却不起作用。大家都知道GET方式提交数据有长度限制,有时我们必须使用POST方式来提交数据。

但对于POST方式,使用上述的几种方法经过多次测试,问题依旧。我郁闷了好几天。

今天把问题解决了,很简单,是使用escape(或encodeURI,两个函数javascript的函数,功能基本相同,可以查一下相关的帮助),但要使用两次,这是解决问题的关键。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

我的例子涉及两个页面,一个是初始页面,一个是AJAX请求处理页面。

初始页面内容如下(hello.jsp):

%@ page language="java" import="java.util.*" pageEncoding="GB18030"%
%String path = request.getContextPath();%
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
html
  head
    titleAJAX提交页面/title
 meta http-equiv="Content-Type" content="text/html; charset=GB18030"
   script type="text/javascript"
    function justdo(){
  var post="name=王力猛&email=wallimn@sohu.com&bokee=http://wallimn.bokee.com";
  post = encodeURI(post);
  post = encodeURI(post);//两次,很关键
  var xmlObj = new ActiveXObject('Msxml2.XMLHTTP');
  var URL = '%= path%/page/act.jsp';//文件名需要调整成测试时的相应位置?
  xmlObj.open ('post',URL,true);
  xmlObj.setrequestheader("cache-control","no-cache");
  xmlObj.setrequestheader("Content-Type","application/x-www-form-urlencoded");
  xmlObj.send (post);//注意:POST方式,使用这个来发送内容?
   }
   /script
  /head 
  body
  input type="button" value="提交" onclick="justdo()"/
   /body
/html
/////////////////////////////////////////////////////////////////////////////////////
  ajax请求处理页面(act.jsp)的内容如下:
/////////////////////////////////////////////////////////////////////////////////////

%@ page language="java" import="java.util.*" pageEncoding="GB18030"%
%String path = request.getContextPath();%
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
%@page import="java.net.URLDecoder"%
html
  head
    titleajax deal/title
 meta http-equiv="pragma" content="no-cache"
 meta http-equiv="cache-control" content="no-cache"
 meta http-equiv="expires" content="0"   
  /head
  body
  %
  //遍历输出参数内容。
  for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {
   String h = (String) e.nextElement();
   String v = request.getParameter(h);
   String mm =  java.net.URLDecoder.decode(v, "UTF-8");
   System.out.println("请求参数: " + h + " = " + mm);
  }
   %
  /body
/html
/////////////////////////////////////////////////////////////////////////////////////
分析:当调用request.getParameter()函数时,会自动进行一次URI的解码过程,调用时内置的解码过程会导致乱码出现。而URI编码两次后,request.getParameter()函数得到的是原信息URI编码一次的内容。再用可控的解码函数java.net.URLDecoder.decode()就可解出原始的正确的信息。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

以上分析纯属个人看法,不知是否正确。

展开更多 50%)
分享

猜你喜欢

AJAX POST提交中文乱码解决(jsp)

Web开发
AJAX POST提交中文乱码解决(jsp)

解决ajax提交表单时中文乱码的问题

Web开发
解决ajax提交表单时中文乱码的问题

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

AJAX在Post中文的时候解决乱码的方法

Web开发
AJAX在Post中文的时候解决乱码的方法

AJAX在Post中文的时候乱码的解决方法

Web开发
AJAX在Post中文的时候乱码的解决方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

解决Ajax中文乱码问题

Web开发
解决Ajax中文乱码问题

jsp中文乱码 jsp mysql 乱码的解决方法

Web开发
jsp中文乱码 jsp mysql 乱码的解决方法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

用代码通过ODBC刷新链接(mdb+SQL SEVER2000)

用代码通过ODBC刷新链接(mdb+SQL SEVER2000)

教程: Access 2002的三个实用技巧

教程: Access 2002的三个实用技巧
下拉加载更多内容 ↓