轉自:http://community.hf-mstc.org/cs/blogs/shakewang/archive/2006/07/06/2931.aspx
上次,我遇到的 MagicAjax的中文問題, 當初爲了演示,只是臨時的使用了數字來繞過中文提交的問題,但不是最終的解決方法。今天終於忍不住這個亂碼了,就打算解決它。先是到網上搜索一下,但都是說的另外一個問題。大部分人都是說把 magicajax post數據時的那個“loading...”修改成中文,出現亂碼,這個好解決,這個漢字在 AjaxCallObject.js 文件裏,直接把AjaxCallObject.js文件保存成utf-8就解決了。
我的問題是:頁面上假如有個文本框,輸入的是漢字,那麼使用magicajax去提交數據到後臺,在後臺獲取到的是亂碼。打開magicajax的源碼,找到 AjaxCallObject.js文件(之所以還是直接找這個文件,是因爲ajax提交數據首先是通過js調用xmlhttp對象,將數據post到後臺的,那麼,就看看magicajax是不是把這個提交的數據進行了處理),找到使用xmlhttp提交的這段:
function(eventTarget, eventArgument, ajaxCallType, ajaxScopeID, additionalData) {...... this.XmlHttp.open("POST", thePage, true); this.XmlHttp.onreadystatechange = function(){ oThis.ReadyStateChange(); }; this.XmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); this.XmlHttp.send(theData); }
可以看出在這裏提交了theData數據,我用alert(theData)的方法將數據在提交前顯示出來,發現提交的數據都直接顯示是中文,然後再跟蹤程序到後臺,發現就已經是亂碼了,這說明這個 AjaxCallObject.js 本身並沒有對這個post的數據進行編碼處理。
然後,就好辦了,使用jscript裏的 escape()函數將待post的數據在提交前編碼一下,就不會出現中文了。代碼如下:
+ escape(curElem.options[j].value) + '&';
除此之外,還要找到如下這段代碼並按註釋修改:
//split("&").join("%26").split("+").join("%2b"); return data.split("=").join("%3d").split("&").join("%26").split("+").join("%2b"); }
這樣就解決了所有的中文亂碼問題!