在用jquery處理html5的應(yīng)用的時(shí)候,一直在firefox下測(cè)試都正常,用戶用pad訪問(wèn)的時(shí)候說(shuō)有亂碼,
自己試驗(yàn)了下果然,后發(fā)現(xiàn)chrome和ie內(nèi)核下都是有此問(wèn)題,此問(wèn)題設(shè)置了頁(yè)面屬性為utf-8時(shí)候,只有firefox是傳的charset=utf-8的頭文件
chrome和ie都沒(méi)有指定,所以出現(xiàn)亂碼問(wèn)題.
解決方法:
$.ajaxsetup({
contenttype: application/x-www-form-urlencoded; charset=utf-8
});
$.post(test.php, { name: i5a6, time: 2pm },
function(data){
process(data);
}, json);
或者使用:
$.ajax({
,
type:post,
data:data,
contenttype:application/x-www-form-urlencoded; charset=utf-8,
datatype:json,
success: function(){
...
}
})
推薦使用第一種,不過(guò)也是根據(jù)自己的實(shí)際情況看的,有人推薦用 encodeuricomponent 做字符轉(zhuǎn)換
總結(jié)一下ajax 提交數(shù)據(jù)亂碼一些經(jīng)驗(yàn)
為了避免亂碼,可以做到以下幾步
解決方法
1,保持編碼的統(tǒng)一,包括文件編碼,數(shù)據(jù)庫(kù)編碼,網(wǎng)頁(yè)content-type編碼
檢查一下<meta http-equiv=”content-type” content=”text/html; charset=utf-8″ />
建議中文都是用utf-8,使用gbk/gb2312有可能會(huì)出現(xiàn)亂碼
2,使用post來(lái)發(fā)送而不是get
get方法是會(huì)通過(guò)鏈接來(lái)傳遞參數(shù),而且會(huì)自動(dòng)urlencode(編碼),而各個(gè)瀏覽器編碼的方式可能不太一樣。使用post可以避免這種情況。
3,通過(guò)在js前端escape編碼再發(fā)送,然后后臺(tái)解碼取得數(shù)據(jù)
這些可以在網(wǎng)上搜索
4,在全局設(shè)定contenttype,指定編碼
因?yàn)閖query ajax是使用utf-8來(lái)編碼發(fā)送數(shù)據(jù)的,ie在發(fā)送時(shí)卻沒(méi)加上charset=utf-8,從而導(dǎo)致亂碼(ie默認(rèn)使用iso-8859-1編碼)
$.ajaxsetup({
contenttype: application/x-www-form-urlencoded; charset=utf-8