国产gaysexchina男同gay,japanrcep老熟妇乱子伦视频,吃奶呻吟打开双腿做受动态图,成人色网站,国产av一区二区三区最新精品

ajax中文亂碼的各種解決辦法

2018-09-06 19:43 更新

ajax中出現(xiàn)亂碼一般是當(dāng)前頁面,程序處理頁面,數(shù)據(jù)庫這幾天的編碼不一致引起的,解決辦法很簡(jiǎn)單統(tǒng)一編碼就好了。


因?yàn)閄MLHttp在處理返回的responstText的時(shí)候把responstBody按UTF-8編碼進(jìn)行解碼的,如果服務(wù)器端送出的數(shù)據(jù)流的確是UTF-8編碼,那么中文字就會(huì)正確顯示,但如果是GBK或是其他編碼則會(huì)出現(xiàn)上述情況。


AJAX的中文亂碼可以大概分為兩中,第一種是向服務(wù)器端發(fā)送中文參數(shù)時(shí)(xmlhttp.open(“get|post”,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);
 
然后測(cè)試,在Firefox上順利解決了問題,以為大公告成了,可是再到IE下測(cè)試,發(fā)現(xiàn)IE又出現(xiàn)了問題,服務(wù)器端接收到的參數(shù)沒值,這下就郁悶了,突然看到發(fā)送頭設(shè)置了setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);,就找到問題所在了,然后就在發(fā)送那里進(jìn)行了參數(shù)編碼:


代碼如下
geturl=encodeURI(geturl);
geturl=encodeURI(geturl); //兩次也可以寫成geturl=encodeURI(encodeURI(geturl));
xmlhttp.open(“GET”,geturl,true);
然后再到服務(wù)器端進(jìn)行URL解碼:
$str=urldecode($str); //解碼 

$ str =iconv(“UTF-8″,”GB2312″,$ str);  //編碼轉(zhuǎn)換


注意:解碼必須在編碼轉(zhuǎn)換前面,不然得不到正確值

保存測(cè)試,IE和Firefox都能正常了。


第二種就是服務(wù)器端向客戶端輸出中文時(shí)出現(xiàn)亂碼,這類問題網(wǎng)上的答案就比較多了,也都能解決,為了避免各位再去查找,這里就COPY下


原因:AJAX在接收responseText或responseXML的值的時(shí)候是按照UTF-8的格式來解碼的,如果服務(wù)器段發(fā)送的數(shù)據(jù)不是UTF-8的格式,那么接收responseText或responseXML的值有可能為亂碼。


ajax亂碼解決辦法一:


在服務(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”);


ajax亂碼解決方法二:


PHP發(fā)送中文、Ajax接收
只需在php頂部加入一句:


代碼如下
header(‘Content-type: text/html;charset=GB2312′);
xmlHttp會(huì)正確解析其中的中文。
Ajax發(fā)送中文、PHP接收
這個(gè)比較復(fù)雜:
Ajax中先用encodeURIComponent對(duì)要提交的中文進(jìn)行編碼
PHP中:


代碼如下
$GB2312string=iconv( ‘UTF-8′, ‘gb2312//IGNORE’ , $RequestAjaxString);
PHP寫入MySQL數(shù)據(jù)庫
建立conn時(shí),query一下set names “gb2312″



代碼如下
iconv( “UTF-8″,”GBK” , $gametypes["name"]);


 
亂碼問題是AJAX取數(shù)據(jù)時(shí)產(chǎn)生亂碼,本來頁面是采用GBK編碼的。后來顯示為亂碼,使用UE把它轉(zhuǎn)換成UTF-8后,

頁面上原來的元素就可以顯示正確了。但是,數(shù)據(jù)庫取出來的值還是會(huì)亂碼。


ob_get_contents ();
取出所有的顯示數(shù)據(jù),然后輸出到日志文件,顯示全是亂碼。

使用UE把文件再轉(zhuǎn)換成GBK,然后再輸出,顯示就正確了。


這里再使用:

代碼如下
header(‘Content-Type:text/html;charset=GBK’);
前臺(tái)頁面顯示就正常。


說了這么多我們來看實(shí)例


例如:


代碼如下
var url="a.jsp?name=小李";
xmlHTTP.open ("post",url,true);

解決辦法:

利用javascript的提供的escape()或encodeURI()方法

例如:

客戶端:

代碼如下
var url="a.jsp?name=小李";
url=encodeURI(url); 
url=encodeURI(url); //兩次,很關(guān)鍵[具體為什么,我也不清楚]
/********************************************/
也有人寫成var url="a.jsp?name=escape("小李")";

功能和encodeURI方法類似。

/********************************************/
xmlHTTP.setrequestheader("cache-control","no-cache"); 
xmlHTTP.setrequestheader("Content-Type","application/x-www-form-urlencoded"); 
xmlHTTP.setrequestheader("contentType","text/html;charset=uft-8")//指定發(fā)送數(shù)據(jù)的編碼格式
xmlHTTP.open ("post",url,true);


服務(wù)器端:


 代碼如下
String name = request.getParameter("name"); 
name = java.net.URLDecoder.decode("name", "UTF-8");
總結(jié)了一下最簡(jiǎn)單的方法就是頁面和請(qǐng)求返回的頁面編碼一致就好了



解決AJAX中文回傳亂碼,其實(shí)就是將在服務(wù)器端文件加一個(gè)HEADER,指明送出的是什么編碼流。比如


ASP文檔就是在頭部增加一行說明:


 代碼如下
Response.Charset("GB2312")
PHP的示例如下:


 代碼如下
header('Content-Type:text/html;charset=GB2312');
JSP的如下:


 代碼如下
response.setHeader("Charset","GB2312");
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)