`
yaojaylone
  • 浏览: 12414 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Ajax使用POST提交中文乱码问题.doc

 
阅读更多

Ajax使用POST提交中文乱码问题

 

前段时间写JSP,使用AJAXPOST方式提交数据,如果是中文字符提交就会乱码,后来写ASP时用到AJAXPOST方式提交数据,中文一样是乱码。搜索一下相关资料,问题应该是提交数据时是以UTF-8编码提交,所以接收时如果使用GB2312或者其它中文编码的话就会乱码。

 

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

 

对于使用POSTJSP的解决方法如下:
使用escape(或encodeURI,两个函数都是JavaScript的函数,功能基本相同,可以查一下相关的帮助),但要使用两次,这个是关键。

 

初始页面内容如下(hello.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>AJAX
提交页面</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 = "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"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page import="java.net.URLDecoder"%>
<html>
<head>
<title>ajax 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()就可解出原始的正确的信息。

 

 

对于ASP,可以在客户端使用JavaScriptencodeURIComponent函数(其它编码函数可能也行,没有试)编码两次,然后ASP使用Request.Form接收后使用JavaScriptdecodeURIComponent解码一次:

 

初始页面内容如下(hello.asp)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>AJAX
提交页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
<script type="text/javascript">
function justdo(){
    var post = "name=" + encodeURIComponent(encodeURIComponent("
王力猛")); //两次

    var xmlObj = new ActiveXObject("Msxml2.XMLHTTP");
    var URL = "act.asp"; //
文件名需要调整成测试时的相应位置
    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.asp)的内容如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>ajax 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>
<%
Dim context
context = decodeText(Request.Form("name"))
Response.Write("name=" & context)
%>
</body>
</html>
<script language="javascript" runat="server">
function decodeText(str){
    return (str == null ? "" : decodeURIComponent(str));
}
</script>

 

ASP处理的原理跟JSP的差不多,都是在客户端编码两次,在服务器端解码一次。以上方法是我总结网上的方法和自己的研究写出来的,如果朋友你有更加好的方法请指教。 

分享到:
评论

相关推荐

    Ajax使用POST提交中文乱码问题.docx

    在使用Ajax进行POST提交时,中文字符可能会遇到乱码问题,这是因为数据在传输过程中编码与解码不匹配导致的。Ajax以UTF-8编码发送数据,但服务器端可能使用了不同的字符集(如GB2312)来解析,这就产生了乱码。本文...

    java认证_Ajax中文乱码问题及解决方法.doc

    【Java认证:Ajax中文乱码问题及解决方法】 在Java Web开发中,使用Ajax进行异步数据交互时,经常会遇到中文乱码的问题。这主要涉及到字符编码的处理,特别是当Ajax请求发送的数据包含中文字符时。以下是两种常见的...

    Ajax中文乱码问题解决方案

    在实际开发中,可以结合使用以上方法来解决Ajax中文乱码问题。例如,可以使用jQuery的`$.ajax`方法,设置`contentType`和`dataType`属性,以及在成功回调函数中处理响应数据: ```javascript $.ajax({ url: 'your-...

    ajax提交,后台中文乱码解决

    中文乱码问题在Web开发中是一个常见的挑战,特别是在使用Ajax进行异步数据提交时。通过正确使用URL编码或选择合适的参数传递方式,可以有效地解决这一问题。在实际应用中,开发者应当根据具体情况选择最合适的方法,...

    Asp中用法JQuery的AJAX提交中文乱码解决方法_.docx

    然而,在使用AJAX时,中文乱码问题经常会出现,尤其是在Asp中使用JQuery的AJAX提交时。因此,本文将介绍如何在Asp中使用JQuery的AJAX提交中文乱码解决方法。 一、客户端页(client.html) 在客户端页中,我们使用...

    c# ajax post数据乱码解决

    在开发过程中,尤其是在使用C#与ASP.NET进行Web开发时,经常会遇到客户端通过Ajax向服务器端发送Post请求后,服务器端接收到的数据出现乱码的问题。这种情况不仅影响用户体验,也可能会导致程序逻辑出现问题。本文将...

    AJAX乱码解决大全.doc

    ### AJAX乱码问题详解与解决策略 #### 编码基础概览 乱码问题往往源自于数据在传输过程中编码方式的不一致。在探讨AJAX乱码解决之道前,我们首先来了解一下几种常见的编码格式: - **UTF-8**:全球最广泛使用的...

    asp+ajax(jQuery)实例($.ajax()、$.post()、$.get()、$.getJSON()四种模式可选)

    asp+ajax(jQuery)实例($.ajax()、$.post()、$.get()、$.getJSON()四种模式可选 Ajax是目前比较流行的网站建设技术,尤其作为网站建设者来说,掌握它十分有必要,如果用原生Javascript开发则比较困难,还好有强大的...

    ajax提交中文乱码解决方法

    为了解决AJAX提交中文乱码的问题,可以从以下几个方面入手: ##### 1. 客户端编码处理 - **使用`URLEncoder`编码**:在发送请求之前,可以先使用Java的`URLEncoder.encode()`方法将中文字符串进行编码,然后再发送...

    ajax快速解决参数过长无法提交成功的问题

    在ajax中使用post方法,用常规的参数格式:param1=a1&param2=a2 ,当参数长度过长时,依然提交不成功。比如我们经常这样写一个ajax的post请求: $.ajax({ type: "post", // post or get contentType:"application...

    ajax+pako.js实现gzip数据压缩上传,解决post数据过长问题

    在现代Web应用中,我们经常需要通过Ajax...通过以上步骤,我们可以实现使用ajax和pako.js的gzip数据压缩上传,有效解决POST数据过长的问题。这种技术尤其适用于需要发送大量数据的场景,如文件上传、实时同步大数据等。

    ASP.NET_AJAX入门系列

    ASP.NET_AJAX入门系列:Timer控件简单使用.doc ASP.NET_AJAX入门系列:UpdateProgress控件简单介绍.doc ASP.NET_AJAX入门系列:使用ScriptManagerProxy控件.doc ASP.NET_AJAX入门系列:使用ScriptManager控件.doc ...

    Ext Ajax:如何调用Ext.Ajax.request方法和使用Java Servlet进行处理.doc

    Ext Ajax:如何调用Ext.Ajax.request方法和使用Java Servlet进行处理

    Ajax 中文乱码问题

    在使用Ajax进行数据传输时,中文乱码问题通常出现在以下两个环节: 1. **发送表单数据时中文乱码**:当通过Ajax发送含有中文字符的表单数据时,如果没有正确的编码,接收端解析时就会出现乱码。 2. **接收服务器...

    ajax POST 与GET提交的区别

    ### AJAX POST 与 GET 提交的区别详解 #### 一、GET与POST基本概念及应用场景 ...此外,在使用AJAX技术进行网络请求时,还需要特别注意编码问题,确保客户端和服务器端的编码一致,以避免乱码问题的发生。

    详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()

    在深入探讨Jquery中的Ajax...在实际应用中,开发者应根据具体需求选择合适的函数,如需要发送大量数据或保护数据安全时,可以选择使用`$.post()`或`$.ajax()`;而在获取JSON格式数据时,`$.getJSON()`则是最佳选择。

    基于ajax_javaweb网页聊天室论文.doc

    "基于Ajax_JavaWeb网页聊天室论文.doc" Ajax技术是当前Web2.0热潮中最受关注的技术术语之一。Ajax(Asynchronous JavaScript and XML),异步JavaScript与XML,是使用客户端脚本与Web服务器交换数据的Web应用开发...

    ajax提交乱码

    在IT领域,特别是Web开发中,遇到“Ajax提交乱码”的问题是非常常见的,尤其是在处理中文或其它非英文字符集时。根据给定的文件信息,我们可以深入探讨如何使用Jquery来解决这一问题。 ### Ajax提交乱码问题的本质 ...

    ajax中文乱码如何解决

    在本文中,我们将深入探讨如何解决使用Ajax进行POST请求时出现的中文乱码问题。首先,我们要理解Ajax中文乱码的根源,它通常涉及到字符编码的不一致,尤其是在客户端与服务器之间的通信过程中。 Ajax(Asynchronous...

Global site tag (gtag.js) - Google Analytics