看程式碼:
var xmlhttp=getHTTPObject();
var post="test·test+test·";
xmlhttp.open('POST', 'test.asp?random='+Math.random(), 真);
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!吃飯去! !