易截截图软件、单文件、免安装、纯绿色、仅160KB

表单ajax提交乱码问题


问题
在现有主站中使用的是是GBK编码的,当表单使用form submit方式递交的话没有问题,服务器端能够正确识别字符编码。但是,当客户端使用ajax的方式递交表单的话,服务器端识别客户端递交的表单的内容,当内容中有中文字符的话就会出现乱码现象。
原因分析
究其原因,其实很简单,使用ajax方式提交的表单是用utf-8编码来提交的,这样服务器端在接收客户端表单的内容的时候还是按照GBK或其他编码方式来解析的,自然解析出来的内容会出现乱码了。
表单内容可以通过GET或POST方式发送,但是用这两种方式有几个不同之处,对“你好”调用javascript函数encodeURI()解析之后得到的字符串为“%E4%BD%A0%E5%A5%BD”,需要注意的一点,encodeURI()这个函数只会对字符串进行utf8编码。当客户端把“%E4%BD%A0%E5%A5%BD”这段字符串通过GET或者POST方式发送会发生什么事。
1.GET方式
当用get方式提交表单,在服务端的tomcat服务器中会用一个connector来自动解析编码之后字符串,以下是connector的配置节点:
<Connector port="80"
maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false" redirectPort="8443"
acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
URIEncoding="GBK" />

上面配置中有一个属性URIEncoding="GBK"的作用是,当客户端get发送信息中有encode模式的字符串就是用gbk来decode它。和遗憾,主站服务器中的URIEncoding属性是gbk不能变了,而客户端encodeURI()只能编码UTF-8的字符。所以,用这种方式发送的字符串在服务器端就会出现乱码现象。
2. POST方式
当客户端发送“%E4%BD%A0%E5%A5%BD”字符串时,是通过YAHOO.util.Connect这个控件来发送的,如果客户端能正常地发送“%E4%BD%A0%E5%A5%BD”这个字符串,服务端接收到之后并不会做额外的转义,但是YAHOO.util.Connect 将encode之后字符串传给Connect控件之后,这个控件在内部会将encode之后的字符再decode之后再发送,因为发送的是utf-8格式的内容,所以服务器端就会出现乱码。
解决办法
尝试了以上get和post方式之后,觉得在请求的URL上发送数据乱码问题的解决方案比较麻烦,况且,http协议中已经明确说了get和post的区别,get是从服务器端拿一些东西,而post是向服务器传输东西。get方式向服务器端发�


相关文档:

一步一步学ajax(一)

曾经对ajax很好奇,每次和同学或者同事谈起ajax听他们在那轻描淡写一番不知所以然,前几天查资料才豁然明白。下面直入正题:
Ajax 基本上就是把 JavaScript 技术和 XMLHttpRequest
对象放在 Web
表单和服务器之间
。当用户填写表单时,数据发送给一些 JavaScript 代码而不是
直接发送给服务器。相反,JavaScript
......

ajax 返回json

当用ajax返回多个值的时候,可以用xml,也可以用json
json实例
<html>
<head>
<title>AjaxTest</title>
<script type="text/javascript">
var xmlHttp;
function createXMLHttpRequest()
{
    if(window.ActiveXObject)
   & ......

用AJAX调用XML时竟然不能包含任何符号

我用ActiveXObject("Microsoft.xmldom")来装载xml文档时,竟然老是提示装载失败,后来上网搜索了下,说是不能直接包含这5个符号('><&"),必须选用&xx;方式来转义,可我找遍XML也没发现这些。
后来我独行排除,才发现有一个元素的属性值为有“|”,去除后就正常了。我真是觉得奇怪,网上也没有说 ......

FirePHP——Ajax与php开发帮手

前几天在Firebug扩展开发一文中就提到过Firephp这个基于Firebug的插件,通过使用Firephp你可以在Firebug的Console栏中看到要调试的数据,而不影响php程序的正常执行,所以说,这东西对于Ajax开发是很有帮助的!下面一起来看下Firephp的使用方法。
第一步:安装
1.如果你的FireFox没有Firebug这个插件的话,首先要安装Fire ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号