問 題
如何實現(xiàn)UTF8頁面提交數(shù)據(jù)到GB2312頁面不出現(xiàn)亂碼呢?
[詳細(xì)描述]提交頁面是UTF8編碼,搜索頁面是GB2312編碼,要求能正常搜索到中文,不出現(xiàn)亂碼。 相關(guān)附件:
問題補充:

提問者:小米米(級別:黔小學(xué)生) 懸賞分:0分 回答數(shù):1 瀏覽數(shù): 日期:2013/10/5 19:34:55
目前沒有回答!    
最佳答案 此答案由提問者自己選擇,并不代表本站的觀點。
贊成[] 反對[] 評論
回答者:(級別:)日期:
提問者對該答案的評價:
 

一個UTF8頁面需要POST數(shù)據(jù)到GB2312頁面,這時中文的編碼是按照UTF8提交過去的,GB2312頁面無法接收。如何實現(xiàn),網(wǎng)絡(luò)搜索了一種很不錯的方法,但有缺陷,這里一一說起。

1、FORM標(biāo)簽里加上accept-charset代碼,這個能把FORM里的數(shù)據(jù)自動編碼成指定的字符集提交,比如在UTF8頁面提交數(shù)據(jù)到GB2312,代碼就是accept-charset=”GB2312″,但accept-charset除了IE其他瀏覽器都支持。。。

2、這時可以在提交時觸發(fā)JS,document.charset=’GB2312′;,用這段代碼設(shè)置當(dāng)前頁面編碼為GB2312。到這里看似很完美了,但還一個問題,就是觸發(fā)這個代碼后,當(dāng)前頁面刷新之后會亂碼,這是因為你剛才改變了當(dāng)前頁面的編碼。

3、怎么處理刷新后亂碼呢,就是要加以判斷,判斷當(dāng)前頁面編碼和默認(rèn)的編碼是否一致,如果不一致則刷新,if(isIE && document.charset!=”utf-8″)location.reload(false)

4、網(wǎng)上的介紹最多到這步,但是我卻發(fā)現(xiàn),這樣就步入了一個死循環(huán),因為第2步已經(jīng)改變了編碼,您在當(dāng)前頁面不管怎樣刷新,還是改變后的編碼,所以一定要重設(shè)這個編碼才行,代碼就是這樣的。
if(isIE && document.charset!=”utf-8″){
document.charset=’utf-8′;
location.reload(false);}


代碼綜合起來如下:
判斷當(dāng)前頁碼是否為UTF8,如果不是,則設(shè)定編碼為UTF8并刷新,避免亂碼。
var isIE=!!window.ActiveXObject;
if(isIE && document.charset!=”utf-8″){
document.charset=’utf-8′;
location.reload(false);}

設(shè)定FORM的accept-charset,讓非IE瀏覽器直接提交編碼后的數(shù)據(jù)到其他頁面

提交數(shù)據(jù)時觸發(fā)修改當(dāng)前頁面編碼的JS
onsubmit=”if(isIE)document.charset=’GB2312′”


【參考文獻(xiàn)】:網(wǎng)絡(luò)資料
回答者:貴州007 (級別:黔小學(xué)生) 日期:2013/10/5 20:14:01

贊成[0]反對[0]評論 
我來回答
內(nèi) 容:
驗證碼:
 看不清楚?請點擊刷新 看不清楚?請點擊驗證碼刷新
參考文獻(xiàn):
 
附 件:
 >>上傳附件 |

- 如果您的回答內(nèi)容參照了其他文獻(xiàn)資料,就請標(biāo)明其出處;

- 如有知識產(chǎn)權(quán)等糾紛,由回答者本人承擔(dān)相應(yīng)法律責(zé)任。

提示:請先登陸后提交回答!