- 浏览: 530796 次
- 性别:
- 来自: 青岛
文章分类
- 全部博客 (222)
- 帖子来的 (3)
- JavaScript (25)
- Java (10)
- DataBase (2)
- el表达式 (1)
- html (4)
- FCKEDITOR和TINYMCE (3)
- tomcat (5)
- JavaEE (12)
- Eclipse (7)
- Windows (3)
- Dos命令 (1)
- Oracle (20)
- 乱搞 (1)
- AHK (3)
- TC (2)
- vim (12)
- Perl (13)
- ANT (6)
- Android (3)
- antlr (1)
- SSH (14)
- C/C++ (3)
- wordpress (4)
- CSS (3)
- java2D (1)
- Lucene (4)
- Linux (9)
- jquery (4)
- testsomething (7)
- JVM监控优化 (3)
- emacs (4)
- svn cvs版本控制 (2)
- 硬件 (1)
- j2me (2)
- maven (5)
- WebService (4)
- aspectJ (1)
- 算法 (2)
- mysql (1)
- project (2)
- 正则表达式 (2)
- firefox (1)
最新评论
-
直觉:
gua 顶
com.opensymphony.xwork2.inject.DependencyException -
fordfelix:
加了以后 任然存在这个异常 求解!!
struts2 json 插件 @JSON(serialize = false) -
fangyan_oracle:
谢谢了, 很受用
用IE修改当前页面内容的代码zzzz -
cfying:
[flash=200,200][/flash][url][/u ...
精解window.setTimeout()使用方式与参数传递问题!(转) -
qinglangee:
tiewazi 写道param必须是全局变量(即window对 ...
精解window.setTimeout()使用方式与参数传递问题!(转)
用xmlhttp post form时的表单乱码有两方面的原因——post表单数据时中文乱码;服务器response被xmlhttp不正确编码引起的乱码。换句话说,本文主要解决两个问题——怎样正确post中文内容&怎样正确显示得到的中文内容。
part i post中文内容
先看看e文的表单是怎么提交的:
如果把stra = "submit1=submit&text1=scsdfsd";换成:
stra = "submit1=submit&text1=中文";
你会发现提交上去的东东根本不对,asp中request.form("text1")根本取不到值。俺用request.binaryread把一个 html form中的post内容写出来看了看,才发现问题——form提交时也要编码的,编码后的中文是类似于%??%??的转义字符,比如“中文”就被编码为:%d6%d0%ce%c4。呵呵,也怪俺笨,人家content-type里明明写的清清楚楚——application/x-www-form- urlencoded,urlencoded嘛当然就是这个样子了。既然这样,那我们也知道该怎么办了——自己做转换,代码见下:
(在这里俺把前面的javascript的代码改成了vbscript,不是吃饱了撑的没事干,原因见后)
part ii.正确显示得到的中文内容
ok,如果你在server端把form的内容写到数据库/文件的话,你在那里看到的中文毫无问题,但是,假如你想看看server的response——问题来了:如果response的结果不是xml,xmlhttp.responsexml里当然是不会有东东的,那就用responsetext好了,在代码的最后加一句:
alert(oreq.responsetext)
看看俺们辛勤劳动的结果 :p
但是但是.....怎么所有的中文全变成了方格? (我打不出来,有兴趣自己去试,也不用post,get一个含有中文的网页就可以发现了。)
原因很简单:xmlhttp得到response时假定response是utf8编码的,如果response是xml,那还可以通过encoding来指定编码,但html就不行了。(见鬼的gb2312,再次打倒!)所以它把含gb2312编码的html当成utf8格式,不出错才有鬼!
不过好在还有补救的办法:xmlhttp的responsebody 属性里包含的可是未解码的resonse——"a raw undecoded bytes as received directly from the server" :),唯一的问题是,responsebody返回的是一个unsigned bytes数组,我们怎么去访问它,怎么把它转换成bstr?
这就是为什么我在上面把代码改成vbscript的原因——vbscript can do it,but javascript cannot!
代码见下:
文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
part i post中文内容
先看看e文的表单是怎么提交的:
<script language="javascript"> stra = "submit1=submit&text1=scsdfsd"; var oreq = new activexobject("msxml2.xmlhttp"); oreq.open("post","http://servername/vdir/tstresult.asp",false); oreq.setrequestheader("content-length",stra.length); oreq.setrequestheader("content-type","application/x-www-form-urlencoded"); oreq.send(stra); </script>
如果把stra = "submit1=submit&text1=scsdfsd";换成:
stra = "submit1=submit&text1=中文";
你会发现提交上去的东东根本不对,asp中request.form("text1")根本取不到值。俺用request.binaryread把一个 html form中的post内容写出来看了看,才发现问题——form提交时也要编码的,编码后的中文是类似于%??%??的转义字符,比如“中文”就被编码为:%d6%d0%ce%c4。呵呵,也怪俺笨,人家content-type里明明写的清清楚楚——application/x-www-form- urlencoded,urlencoded嘛当然就是这个样子了。既然这样,那我们也知道该怎么办了——自己做转换,代码见下:
<script language="vbscript"> function urlencoding(vstrin) strreturn = "" for i = 1 to len(vstrin) thischr = mid(vstrin,i,1) if abs(asc(thischr)) < &hff then strreturn = strreturn & thischr else innercode = asc(thischr) if innercode < 0 then innercode = innercode + &h10000 end if hight8 = (innercode and &hff00)\ &hff low8 = innercode and &hff strreturn = strreturn & "%" & hex(hight8) & "%" & hex(low8) end if next urlencoding = strreturn end function stra = urlencoding("submit1=submit&text1=中文") oreq = createobject("msxml2.xmlhttp") oreq.open "post","http://servername/vdir/tstresult.asp",false oreq.setrequestheader "content-length",len(stra) oreq.setrequestheader "content-type","application/x-www-form-urlencoded" oreq.send stra </script>
(在这里俺把前面的javascript的代码改成了vbscript,不是吃饱了撑的没事干,原因见后)
part ii.正确显示得到的中文内容
ok,如果你在server端把form的内容写到数据库/文件的话,你在那里看到的中文毫无问题,但是,假如你想看看server的response——问题来了:如果response的结果不是xml,xmlhttp.responsexml里当然是不会有东东的,那就用responsetext好了,在代码的最后加一句:
alert(oreq.responsetext)
看看俺们辛勤劳动的结果 :p
但是但是.....怎么所有的中文全变成了方格? (我打不出来,有兴趣自己去试,也不用post,get一个含有中文的网页就可以发现了。)
原因很简单:xmlhttp得到response时假定response是utf8编码的,如果response是xml,那还可以通过encoding来指定编码,但html就不行了。(见鬼的gb2312,再次打倒!)所以它把含gb2312编码的html当成utf8格式,不出错才有鬼!
不过好在还有补救的办法:xmlhttp的responsebody 属性里包含的可是未解码的resonse——"a raw undecoded bytes as received directly from the server" :),唯一的问题是,responsebody返回的是一个unsigned bytes数组,我们怎么去访问它,怎么把它转换成bstr?
这就是为什么我在上面把代码改成vbscript的原因——vbscript can do it,but javascript cannot!
代码见下:
<script language="vbscript"> function urlencoding(vstrin) strreturn = "" for i = 1 to len(vstrin) thischr = mid(vstrin,i,1) if abs(asc(thischr)) < &hff then strreturn = strreturn & thischr else innercode = asc(thischr) if innercode < 0 then innercode = innercode + &h10000 end if hight8 = (innercode and &hff00)\ &hff low8 = innercode and &hff strreturn = strreturn & "%" & hex(hight8) & "%" & hex(low8) end if next urlencoding = strreturn end function function bytes2bstr(vin) strreturn = "" for i = 1 to lenb(vin) thischarcode = ascb(midb(vin,i,1)) if thischarcode < &h80 then strreturn = strreturn & chr(thischarcode) else nextcharcode = ascb(midb(vin,i+1,1)) strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode)) i = i + 1 end if next bytes2bstr = strreturn end function stra = urlencoding("submit1=submit&text1=中文") oreq = createobject("msxml2.xmlhttp") oreq.open "post","http://servername/vdir/tstresult.asp",false oreq.setrequestheader "content-length",len(stra) oreq.setrequestheader "content-type","application/x-www-form-urlencoded" oreq.send stra alert bytes2bstr(oreq.responsebody) </script>
文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
发表评论
-
有关浏览器的退格键问题(转)
2011-06-24 10:32 3855bbs : http://topic.csdn.net/u/2 ... -
实现jQuery的document.ready功能js代码
2010-09-12 09:15 2866<!DOCTYPE html PUBLIC &quo ... -
改变form 的action时不能用jquery的$("#formId")
2010-07-15 11:55 3152$("#formId").action=& ... -
谷歌的在线翻译API(转)
2010-03-23 16:34 1891谷歌的在线翻译API很好用哈哈 <!DOCTYPE ... -
12种不宜使用的Javascript语法(转载)
2010-01-22 22:13 1070... -
English 背单词
2010-01-12 16:05 1455李老师 跟我攒单词系列的500个单词 <!DOCT ... -
页面定时跳转
2009-11-26 09:51 1408<body> <div id=& ... -
Javascript获得屏幕长度宽度
2009-04-20 22:47 2102网页可见区域宽 document.body.clientWi ... -
document.body.contentEditable='true'
2008-02-21 11:49 7523javascript:document.body.conten ... -
js简单实现div圆角
2008-02-02 15:28 2374原文 http://www.w3pop.com/comm/vi ... -
[JS]slice()方法的使用
2008-02-01 08:45 4678var a; a = new Array("a&q ... -
Ajax::prototype 源码解读 之 prototype.js [转]
2008-01-31 16:23 2094Ajax::prototype 源码解读 之 protot ... -
js鼠标事件大全
2008-01-30 13:59 1880一般事件 事件 浏览器支持 描述 onClick IE ... -
JS操作select相关方法:新增 修改 删除 选中 清空 判断存在 等(转)
2008-01-28 11:32 13881.判断select选项中 是否存在Value="p ... -
js读取文本文件-xmlHTTP
2008-01-16 14:59 3426<html> <head> ... -
嗯, js编码转换(转)
2008-01-16 10:03 3990随便写写, 有兴趣就看, 与.net无多大关系. 这几天无 ... -
动态添加删除行
2007-12-28 15:04 1259//添加行 function addRow(tableNam ... -
如何用js来判断浏览器类型(ie,firefox)等等(zzz)
2007-12-24 17:06 3085现在网络上的浏览器,操作系统就象中国的方言一样,那个叫多啊!这 ... -
js 兼容(转)
2007-12-24 15:44 15281,document.getElementById替代docu ... -
点击表头排序的几种方法(转)
2007-12-24 15:32 1230我记得老早老早大家就开始在经典讨论表格排序的问题了,过了这么多 ...
相关推荐
.XMLHTTP 乱码解决方法 (UTF8,GB2312 编码解码) 在使用 XMLHTTP 发送表单数据时,容易出现中文乱码的问题,主要是由于 Post 表单数据时中文乱码和服务器 Response 被 XMLHTTP 不正确编码引起的乱码。解决这个问题...
本文将深入探讨如何解决XMLHTTP请求过程中可能出现的UTF8和GB2312编码导致的乱码问题,以及如何解决DHTMLX组件无法正确显示中文的问题。 1. **发送方的中文编码转换** 当需要通过XMLHTTP发送包含中文字符的数据时...
本文将深入探讨如何解决GB2312和UTF-8编码导致的乱码问题,以及如何利用VB编程语言和XMLHTTP组件来实现高效、准确的网页源码读取。 首先,我们要理解GB2312和UTF-8编码的区别。GB2312是中国大陆早期广泛使用的简体...
综上所述,要解决PHP与XMLHTTP通信时的乱码问题,需要关注整个数据处理流程中的编码和解码问题,从前端的字符集声明,到服务端的编码转换处理,再到客户端对返回数据的正确解析,每一个环节都不能忽视。
本问题涉及的是一个具体的情景,即UTF-8编码的客户端通过AJAX方式从GB2312编码的服务器端获取数据时遇到的乱码问题。UTF-8是一种广泛采用的Unicode字符编码标准,而GB2312是中国大陆早期的简体中文编码标准,这两种...
在VBScript(VBS)编程中,处理不同字符编码是一个常见的挑战。本文主要关注如何将GB2312编码...在VBScript中,无论是使用ADO还是自定义函数,都能帮助我们处理GB2312这样的非UTF-8编码,确保数据正确地被解析和显示。
通过使用 `encodeURI()` 函数在 AJAX 客户端编码 URL 参数和使用 `URLDecoder` 类在 Servlet 服务器端解码 URL 参数,我们可以解决 AJAX 到 Servlet 乱码问题。这样,我们的应用程序可以正确地处理中文参数,从而...
### Ajax传参是乱码解决方案 在Web开发过程中,数据编码问题经常会导致各种各样的乱码现象...通常情况下,统一使用UTF-8编码是最简单有效的解决方案。希望本文能够帮助大家更好地理解和处理Web开发中的字符编码问题。
然而,默认情况下,AJAX请求通常使用UTF-8编码,这可能导致在处理非UTF-8(如GB2312)编码的数据时出现乱码。 描述中提供的代码片段展示了如何解决这个问题。首先,代码创建了一个XMLHttpRequest对象,这是AJAX的...
本文将详细阐述“支付宝asp集成_utf-8”这一主题,包括如何实现UTF-8编码下的支付宝接口集成,以及解决可能出现的乱码问题。 首先,我们要了解UTF-8编码的重要性。UTF-8是一种广泛使用的Unicode字符编码,能够表示...
如果文件实际编码为其他编码(如UTF-8),而设置的`charset`为`gb2312`,则仍然会出现乱码。因此,正确的做法是先确定文件的实际编码方式,再相应地设置`charset`值。 ##### 案例二:Ajax请求中的乱码问题 当使用...
是因为XMLHttp在处理返回的responstText的时候把responstBody按UTF-8编码进行解码的,如果服务器端送出的数据流的确是UTF-8编码,那么中文字就会正确显示,但如果是GBK或是其他编码则会出现上述情况。 解决的办法是...
当用户在表单中输入中文内容,通过AJAX发送到服务器时,服务器会将接收到的UTF-8编码的中文内容转换成GB2312,然后再返回给客户端,从而避免乱码。 总结来说,处理AJAX与PHP之间的中文乱码问题,关键在于确保数据的...
如果服务器端的页面编码不是UTF-8,比如使用的是GB2312或其他编码,那么在服务器端接收到这些参数时,如果不进行适当的转换,就可能导致乱码。解决这个问题的方法是在服务器端进行编码转换。在PHP中,可以使用`iconv...
一种常见的解决方法是使用JavaScript内置函数`encodeURI`对发送的数据进行编码,并在服务器端使用相应的解码函数来还原原始数据。具体步骤如下: 1. **客户端编码**: ```javascript // 使用POST方式发送请求 ...
2. GET方法时,根据实际的请求参数编码(如GBK或GB2312),使用`new String(bytes, "编码")`进行解码。 3. POST方法时,使用`new String(bytes, "UTF-8")`将请求参数从ISO-8859-1转换为UTF-8。 通过这些步骤,我们...