ASP接收Ajax 在POST方式下发送的escape编码中的个别乱码

王朝asp·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

看代码:

var xmlhttp=getHTTPObject();

var post="test·test+test·";

xmlhttp.open('POST', 'test.asp?random='+Math.random(), true);

xmlhttp.setrequestheader("content-length",post.length);

xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

xmlhttp.onreadystatechange = function(){

if (xmlhttp.readyState == 4 && xmlhttp.status == 200 ){

alert(xmlhttp.responseText);

return true;

}

}

xmlhttp.send("act="escape(post));

在这里,我以POST方式发送了字符串escape("test·test+test·"),并且使用了setRequestHeader

ASP端接收的时候,我用

<%Response.CodePage=936%>

<%Response.Charset="gb2312"

Response.Write Unescape(Request("act"))

%>

最后调试一下你看到的结果就是“·”和“+”都显示不出来。

开始我以为是asp和javascript的escape unescape不配套的结果,后来我使用vbsunescape(如下)代替unescape问题依然如故。

<script language="javascript" runat="server">

function vbsunescape(source){

return unescape(source);

}

</script>

我把+做了转义,但是·不知道怎么弄,他把·转成了什么我本来想写进一个2进制文件看看(必须是二进制文件),但是在asp下用stream操作2进制文件我老出错,哎没时间弄这个了,还有好多事呢,先凑合转义一下了,这个问题留给看到这个blog的高手们,解决了和我说一声,谢了!

function escape2(str){

return escape(str).replace(/\+/g,"%2b");

}

--------------------------------------------

看到大家的回复,谢谢大家。汲取大家的思想精华,我终于研究出来了。。。。

最终的完美的解决方法是这样的

发送端用encodeURIComponent(escape(xxxxxxx))就可以了(其他发送接受代码同上)

我昨天仅作了encodeURI的尝试,没有想到encodeURIComponent和escape套接的方法,刚才突然来了灵感试了一下,太牛逼了,OHYEAH!吃饭去!!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航