- 浏览: 520960 次
- 性别:
- 来自: 青岛
文章分类
- 全部博客 (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 3801bbs : http://topic.csdn.net/u/2 ... -
实现jQuery的document.ready功能js代码
2010-09-12 09:15 2822<!DOCTYPE html PUBLIC &quo ... -
改变form 的action时不能用jquery的$("#formId")
2010-07-15 11:55 2974$("#formId").action=& ... -
谷歌的在线翻译API(转)
2010-03-23 16:34 1834谷歌的在线翻译API很好用哈哈 <!DOCTYPE ... -
12种不宜使用的Javascript语法(转载)
2010-01-22 22:13 1039... -
English 背单词
2010-01-12 16:05 1420李老师 跟我攒单词系列的500个单词 <!DOCT ... -
页面定时跳转
2009-11-26 09:51 1376<body> <div id=& ... -
Javascript获得屏幕长度宽度
2009-04-20 22:47 2027网页可见区域宽 document.body.clientWi ... -
document.body.contentEditable='true'
2008-02-21 11:49 6952javascript:document.body.conten ... -
js简单实现div圆角
2008-02-02 15:28 2344原文 http://www.w3pop.com/comm/vi ... -
[JS]slice()方法的使用
2008-02-01 08:45 4623var a; a = new Array("a&q ... -
Ajax::prototype 源码解读 之 prototype.js [转]
2008-01-31 16:23 2051Ajax::prototype 源码解读 之 protot ... -
js鼠标事件大全
2008-01-30 13:59 1836一般事件 事件 浏览器支持 描述 onClick IE ... -
JS操作select相关方法:新增 修改 删除 选中 清空 判断存在 等(转)
2008-01-28 11:32 13531.判断select选项中 是否存在Value="p ... -
js读取文本文件-xmlHTTP
2008-01-16 14:59 3392<html> <head> ... -
嗯, js编码转换(转)
2008-01-16 10:03 3955随便写写, 有兴趣就看, 与.net无多大关系. 这几天无 ... -
动态添加删除行
2007-12-28 15:04 1237//添加行 function addRow(tableNam ... -
如何用js来判断浏览器类型(ie,firefox)等等(zzz)
2007-12-24 17:06 3044现在网络上的浏览器,操作系统就象中国的方言一样,那个叫多啊!这 ... -
js 兼容(转)
2007-12-24 15:44 14901,document.getElementById替代docu ... -
点击表头排序的几种方法(转)
2007-12-24 15:32 1190我记得老早老早大家就开始在经典讨论表格排序的问题了,过了这么多 ...
相关推荐
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)(附带解决DHTMLX不能用中文的问题)
xmlhttp 乱码 比较完整的解决方法 (UTF8,GB2312 编码 解码)
VB(Visual Basic) UTF8 字符...这里我们做了一小方法、直接先将我们要发送的中文字符转换为UTF8字符集的编码然后在发送Post出去、这样就可以在其他系统里面直接获取、不用去担心乱码问题 GBK相同原理、本人不习惯gbk
客户端是UTF-8编码,这也是现在大家公认的标准编码 在这种情况下,实用AJAX异步获取GB2312编码的服务器端信息时,不可避免的要遇到汉字乱码问题 因为目标数据是GB2312,但XMLHttpRequest默认是用UTF-8来进行数据封装...
解决读取GB2312,UTF-8网页源码乱码问题,只要输入完整的网页地址,选择抓取方式即可得到无乱码的源码,程序引用了Microsoft.XMLHTTP
用AJAX 来GET回一个页面时,RESPONSETEXT里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responseText的时候,是把 resposeBody按UTF-8编码进解码考形成的,如果服务器送出的确实是UTF-8的数据流的时候汉字...
用AJAX来GET回一个页面时,RESPONSETEXT里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responseText的时候,是把resposeBody按UTF-8编码进解码考形成的,如果服务器送出的确实是UTF-8的数据流的时候汉字会...
近来测试php_xmlhttp乱码问题,无他,仅是不想用那些乱七八糟的框架耳,或者高兴了,组织一组也不一定。
AJAX的乱码的出现在的原因 由于XMLHTTP采用的是Unicode编码上传数据,而一般页面采用的是gb2312,这就造成显示页面时产生乱码。而当在获取页面时的XMLHttp返回的是utf-8编码,这就造成了显示产生乱码。 解决方法之一...
用VB发送XMLHTTP请求时,我们经常要用到URLEncode这个函数。下面的两段VB代码分别针对UTF-8(UTF8EncodeURI)和GB2312(GBKEncodeURI)进行了编码的转换
是因为XMLHttp在处理返回的responstText的时候把responstBody按UTF-8编码进行解码的,如果服务器端送出的数据流的确是UTF-8编码,那么中文字就会正确显示,但如果是GBK或是其他编码则会出现上述情况。 解决的办法是...
由于XMLHTTP采用的是Unicode编码上传数据,而一般页面采用的是gb2312,这就造成显示页面时产生乱码.而当在获取页面时的XMLHttp返回的是utf-8编码,这就造成了显示产生乱码. 有一种解决办法就是使用encodeURIComponent...
解决ajax跨域Java解决方案,通过代理实现ajax跨域操作,避免拒绝访问等跨域操作问题
由于平时使用的网页文件基本上都是gb2312编码方式,如果通过xmlhttp控件读取的话,肯定会出现乱码问题,但是要把所有文件都改成utf-8编码,操作上比较麻烦。经过反复比较,我找到了相对实用的解决方法。 ff提供了...
看到的说明原文如下: 用AJAX来GET回一个页面时,RESPONSETEXT里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responseText的时候,是把resposeBody按UTF-8编码进解码考形成的,如果服务器送出的确实是UTF-8...
两个问题: 第一题: xmlhttp 的 responseText 默认总是utf-8的编码,前段时间为了以最小成本解决这个问题,索性整个项目用utf-8编码。网上解决的方法不多,而且都是比较乱七八糟的,不喜欢。又不能以后所有都用utf-...
XmlHttp手册XmlHttp手册XmlHttp手册XmlHttp手册XmlHttp手册