国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > AJAX > 正文

AJAX中文亂碼PHP中完美解決方法

2024-09-01 08:29:11
字體:
來源:轉載
供稿:網友
最近在做一個項目,遇到AJAX中文亂碼問題,經過一個下午的努力終于完美解決,現將心得寫下來,希望對那些還困繞在這個問題而頭痛不已的人們有所幫助。

眾所周知,使用AJAX傳送和接收中文參數時,如果不在客戶端和服務器做相應的處理就會出現亂碼問題,在網上相應的文章也不少,但是有的情況下很難從中找到符合自己理想的答案,我今天就是在網上找了很多,但是都差不多,講ASP和JSP的比較多(我是用的PHP),所以到最后都沒找到自己滿意的答案。

AJAX的中文亂碼可以大概分為兩中,第一種是向服務器端發送中文參數時(xmlhttp.open(“getpost”,url,true)),服務器端接收到的為亂碼,這個也是我今天遇到的問題,沒做處理之前,在IE里是正常的,但是在Firefox里面就出現了亂碼,我先把接收到參數輸出到一個文本里,沒有發現什么問題,郁悶了,然后我就把查詢語句在輸出來觀察(我這里是要從數據庫里查出與參數相關的東西),終于發現問題,IE和Firefox輸出的參數不一樣,雖然漢字上都一樣,但是和前后連接上有細小的區別,于是認定了是編碼問題,在網上查找了相關資料,都沒能解決問題,但是得到一些啟示,因為AJAX發送數據都是采用UTF-8編碼的方式發送的,所以要在服務器端進行編碼轉換(我這里頁面是采用GB2312編碼的,如果是采用UTF-8的話應該不會有這步的問題),所以我在服務器端進行了UTF-8轉GB2312,

$str=iconv("UTF-8","GB2312",$str);

然后測試,在Firefox上順利解決了問題,以為大公告成了,可是再到IE下測試,發現IE又出現了問題,服務器端接收到的參數沒值,這下就郁悶了,突然看到發送頭設置了setRequestHeader("Content-Type","application/x-www-form-urlencoded");,就找到問題所在了,然后就在發送那里進行了參數編碼:
代碼如下:
geturl=encodeURI(geturl);
geturl=encodeURI(geturl); //兩次也可以寫成geturl=encodeURI(encodeURI(geturl));
xmlhttp.open("GET",geturl,true);

然后再到服務器端進行URL解碼:
代碼如下:
$str=urldecode($str); //解碼
$ str =iconv("UTF-8","GB2312",$ str); //編碼轉換

注意:解碼必須在編碼轉換前面,不然得不到正確值
保存測試,IE和Firefox都能正常了。
第二種就是服務器端向客戶端輸出中文時出現亂碼,這類問題網上的答案就比較多了,也都能解決,為了避免各位再去查找,我在這里就COPY下J
原因:AJAX在接收responseText或responseXML的值的時候是按照UTF-8的格式來解碼的,如果服務器段發送的數據不是UTF-8的格式,那么接收responseText或responseXML的值有可能為亂碼。

解決辦法:

在服務器指定發送數據的格式:
在jsp文件中:
response.setContentType("text/text;charset=UTF-8");//返回的是txt文本文件
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 佛教| 六盘水市| 西乡县| 鄂伦春自治旗| 洛阳市| 宜良县| 通州区| 卢龙县| 武强县| 上高县| 梨树县| 荥经县| 宝丰县| 都兰县| 吉木乃县| 新郑市| 龙陵县| 竹山县| 安塞县| 巫溪县| 石棉县| 喀喇沁旗| 南投市| 九龙坡区| 周宁县| 灯塔市| 葫芦岛市| 贡嘎县| 丰城市| 会东县| 合水县| 格尔木市| 临沧市| 皋兰县| 彭阳县| 绥宁县| 霍城县| 濮阳县| 清原| 乌什县| 板桥市|