AJAX中文亂碼PHP中完美解決方法_AJAX教程
推薦:Ajax與JSON的一些學(xué)習(xí)總結(jié)Ajax技術(shù)的核心是XMLHttpRequest對(duì)象(簡稱XHR),可以通過使用XHR對(duì)象獲取到服務(wù)器的數(shù)據(jù),然后再通過DOM將數(shù)據(jù)插入到頁面中呈現(xiàn)。雖然名字中包含XML,但Ajax通訊與數(shù)據(jù)格式無關(guān),所以我們的數(shù)據(jù)格式可以是XML或JSON等格式
最近在做一個(gè)項(xiàng)目,遇到AJAX中文亂碼問題,經(jīng)過一個(gè)下午的努力終于完美解決,現(xiàn)將心得寫下來,希望對(duì)那些還困繞在這個(gè)問題而頭痛不已的人們有所幫助。眾所周知,使用AJAX傳送和接收中文參數(shù)時(shí),如果不在客戶端和服務(wù)器做相應(yīng)的處理就會(huì)出現(xiàn)亂碼問題,在網(wǎng)上相應(yīng)的文章也不少,但是有的情況下很難從中找到符合自己理想的答案,我今天就是在網(wǎng)上找了很多,但是都差不多,講ASP和JSP的比較多(我是用的PHP),所以到最后都沒找到自己滿意的答案。
AJAX的中文亂碼可以大概分為兩中,第一種是向服務(wù)器端發(fā)送中文參數(shù)時(shí)(xmlhttp.open(“getpost”,url,true)),服務(wù)器端接收到的為亂碼,這個(gè)也是我今天遇到的問題,沒做處理之前,在IE里是正常的,但是在Firefox里面就出現(xiàn)了亂碼,我先把接收到參數(shù)輸出到一個(gè)文本里,沒有發(fā)現(xiàn)什么問題,郁悶了,然后我就把查詢語句在輸出來觀察(我這里是要從數(shù)據(jù)庫里查出與參數(shù)相關(guān)的東西),終于發(fā)現(xiàn)問題,IE和Firefox輸出的參數(shù)不一樣,雖然漢字上都一樣,但是和前后連接上有細(xì)小的區(qū)別,于是認(rèn)定了是編碼問題,在網(wǎng)上查找了相關(guān)資料,都沒能解決問題,但是得到一些啟示,因?yàn)锳JAX發(fā)送數(shù)據(jù)都是采用UTF-8編碼的方式發(fā)送的,所以要在服務(wù)器端進(jìn)行編碼轉(zhuǎn)換(我這里頁面是采用GB2312編碼的,如果是采用UTF-8的話應(yīng)該不會(huì)有這步的問題),所以我在服務(wù)器端進(jìn)行了UTF-8轉(zhuǎn)GB2312,
$str=iconv("UTF-8","GB2312",$str);
然后測試,在Firefox上順利解決了問題,以為大公告成了,可是再到IE下測試,發(fā)現(xiàn)IE又出現(xiàn)了問題,服務(wù)器端接收到的參數(shù)沒值,這下就郁悶了,突然看到發(fā)送頭設(shè)置了setRequestHeader("Content-Type","application/x-www-form-urlencoded");,就找到問題所在了,然后就在發(fā)送那里進(jìn)行了參數(shù)編碼:
復(fù)制代碼 代碼如下:www.hl5o.cn
geturl=encodeURI(geturl);
geturl=encodeURI(geturl); //兩次也可以寫成geturl=encodeURI(encodeURI(geturl));
xmlhttp.open("GET",geturl,true);
然后再到服務(wù)器端進(jìn)行URL解碼:
復(fù)制代碼 代碼如下:www.hl5o.cn
$str=urldecode($str); //解碼
$ str =iconv("UTF-8","GB2312",$ str); //編碼轉(zhuǎn)換
注意:解碼必須在編碼轉(zhuǎn)換前面,不然得不到正確值
保存測試,IE和Firefox都能正常了。
第二種就是服務(wù)器端向客戶端輸出中文時(shí)出現(xiàn)亂碼,這類問題網(wǎng)上的答案就比較多了,也都能解決,為了避免各位再去查找,我在這里就COPY下J
原因:AJAX在接收responseText或responseXML的值的時(shí)候是按照UTF-8的格式來解碼的,如果服務(wù)器段發(fā)送的數(shù)據(jù)不是UTF-8的格式,那么接收responseText或responseXML的值有可能為亂碼。
解決辦法:
在服務(wù)器指定發(fā)送數(shù)據(jù)的格式:
在jsp文件中:
response.setContentType("text/text;charset=UTF-8");//返回的是txt文本文件
或是
response.setContentType("text/xml;charset=UTF-8");//返回的xml文件
PHP:header('Content-Type:text/html;charset=GB2312');
ASP:Response.Charset("GB2312")
JSP:response.setHeader("Charset","GB2312");
分享:ASP+AJAX+ACCESS數(shù)據(jù)庫實(shí)例講解三個(gè)步驟分享其實(shí)說起AJAX的初級(jí)應(yīng)用是非常簡單的,通俗的說就是客戶端(javascript)與服務(wù)端(asp或php等)腳本語言的數(shù)據(jù)交互
相關(guān)AJAX教程:
- Ajax中瀏覽器的緩存問題解決方法
- AJAX和WebService實(shí)現(xiàn)省市縣三級(jí)聯(lián)動(dòng)具體代碼
- ajax 登錄功能簡單實(shí)現(xiàn)(未連接數(shù)據(jù)庫)
- AJAX和WebService實(shí)現(xiàn)郵箱驗(yàn)證(無刷新驗(yàn)證郵件地址是否合法)
- AJAX和三層架構(gòu)實(shí)現(xiàn)分頁功能具體思路及代碼
- 使用AJAX返回WebService里的集合具體實(shí)現(xiàn)
- AJAX獲取服務(wù)器當(dāng)前時(shí)間及時(shí)間格式輸出處理
- ajax傳遞多個(gè)參數(shù)具體實(shí)現(xiàn)
- ajax傳遞一個(gè)參數(shù)具體實(shí)現(xiàn)
- 滑輪滾動(dòng)到頁面底部ajax加載數(shù)據(jù)配合jsonp實(shí)現(xiàn)探討
- jQery ajax——load()方法示例介紹
- jQuery+Ajax實(shí)現(xiàn)表格數(shù)據(jù)不同列標(biāo)題排序(為表格注入活力)
AJAX教程Rss訂閱編程教程搜索
AJAX教程推薦
- JQuery+ajax實(shí)現(xiàn)批量上傳圖片(自寫)
- 如何用AJAX實(shí)現(xiàn)網(wǎng)頁無刷新功能
- 談AJAX技術(shù)在PHP開發(fā)中的簡單應(yīng)用
- AJAX編程實(shí)踐之與服務(wù)器通信
- jPager一個(gè)適合Ajax+JSON+jQuery環(huán)境使用的多功能頁碼欄
- ajax 登錄功能簡單實(shí)現(xiàn)(未連接數(shù)據(jù)庫)
- 基于AJAX技術(shù)實(shí)現(xiàn)Struts校驗(yàn)框架
- 解讀輕量級(jí)的Ajax解決方案——DynAjax的JQuery版
- ajax后退解決方案
- 解決ajax緩存的三種方法
猜你也喜歡看這些
- jPager一個(gè)適合Ajax+JSON+jQuery環(huán)境使用的多功能頁碼欄
- JavaScript如何控制Session實(shí)現(xiàn)原理及代碼
- Ajax與JSON的一些學(xué)習(xí)總結(jié)
- AJAX教程之由省份選擇城市
- 滑輪滾動(dòng)到頁面底部ajax加載數(shù)據(jù)配合jsonp實(shí)現(xiàn)探討
- 解析AJAX中的一些關(guān)鍵技術(shù)
- Ajax $.getJSON案例詳解
- 怎樣用DHTML與XML制作Ajax幻燈片
- AJAX和WebService實(shí)現(xiàn)省市縣三級(jí)聯(lián)動(dòng)具體代碼
- AJAX教程之jQuery事件總結(jié)
- 相關(guān)鏈接:
- 教程說明:
AJAX教程-AJAX中文亂碼PHP中完美解決方法
。