新聞中心
本文操作環(huán)境:Windows7系統(tǒng),php7.1版,Dell G3電腦。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到沿灘網(wǎng)站設(shè)計(jì)與沿灘網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類(lèi)型包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋沿灘地區(qū)。
如何解決ajax傳到后臺(tái)php中文亂碼問(wèn)題?
PHP中AJAX應(yīng)用中文亂碼解決方法
web應(yīng)用開(kāi)發(fā)中經(jīng)常出現(xiàn)中文亂碼情況!
今天主要整理下思路:
出現(xiàn)亂碼的大多數(shù)情況是我們進(jìn)行AJAX時(shí)所遇到的!因?yàn)橹苯訑?shù)據(jù)庫(kù)讀取是不會(huì)有任何編碼上的問(wèn)題的~
1.從前臺(tái)JS提交數(shù)據(jù)到后臺(tái)的情況下
AJAX數(shù)據(jù)時(shí),不管是直接用底層xmlHttprequest還是用jQuery的ajax進(jìn)行數(shù)據(jù)傳遞時(shí)!ajax都會(huì)使用utf-8進(jìn)行編碼后發(fā)送!
如果我們的頁(yè)面是UTF-8那沒(méi)有問(wèn)題!傳遞過(guò)去的中文數(shù)據(jù)不會(huì)亂碼!
如果是GB2312的話~問(wèn)題就來(lái)了!GBK被UTF-8轉(zhuǎn)換后發(fā)送到后臺(tái),這時(shí)后臺(tái)直接接收到的已經(jīng)亂碼了!
(解決方法:后臺(tái)語(yǔ)言為PHP的情況下,iconv('utf-8','gb2312',$_POST['Data']);)
原理很簡(jiǎn)單:后臺(tái)直接接收是utf-8,而頁(yè)面都是GBK,那只要把接收到的數(shù)據(jù)再重新轉(zhuǎn)回為GBK就可以了!
這時(shí)再做數(shù)據(jù)庫(kù)操作就可以了!存入數(shù)據(jù)庫(kù)里的必定是正常的中文字符了!
2.后臺(tái)頁(yè)面讀取到數(shù)據(jù)庫(kù)里數(shù)據(jù)中含有中文字符,此時(shí)再回傳到JS前臺(tái)的情況下
PHP頁(yè)面從數(shù)據(jù)庫(kù)里讀取到了正常的中文字符想通過(guò)AJAX再回傳回去~
如果傳遞回去只是把數(shù)據(jù)不作任何處理直接以字符串的形式傳回去!這是沒(méi)有問(wèn)題的!中文在前臺(tái)頁(yè)面上顯示一切正常!
但后臺(tái)數(shù)據(jù)我們一般是需要包裝一下!不然前臺(tái)接收到的數(shù)據(jù)會(huì)很難處理!
如果是PHP的話!那么我們現(xiàn)在一般用JSON進(jìn)行傳遞!這樣傳遞到前臺(tái)JS的數(shù)據(jù)就會(huì)非常容易解開(kāi)并操作!
在PHP后臺(tái)進(jìn)行json轉(zhuǎn)換操作時(shí),問(wèn)題就來(lái)了!
json轉(zhuǎn)換時(shí)會(huì)發(fā)現(xiàn)從數(shù)據(jù)庫(kù)讀取出來(lái)的中文又出現(xiàn)NULL或其它不正常的情況,這是因?yàn)镴SON只轉(zhuǎn)義encoding編碼!咱也甭管他轉(zhuǎn)義什么編碼!
反正JSON轉(zhuǎn)中文出現(xiàn)亂碼的情況~~
解決辦法如下:
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
static $recursive_counter = 0;
if (++$recursive_counter > 1000) {
die('possible deep recursion attack');
}
foreach ($array as $key => $value) {
if (is_array($value)) {
arrayRecursive($array[$key], $function, $apply_to_keys_also);
} else {
$array[$key] = $function($value);
}
if ($apply_to_keys_also && is_string($key)) {
$new_key = $function($key);
if ($new_key != $key) {
$array[$new_key] = $array[$key];
unset($array[$key]);
}
}
}
$recursive_counter--;
}
function JSON($array) {
arrayRecursive($array, 'urlencode', true);
$json = json_encode($array);
return urldecode($json);
}
$json_string=JSON($data);
//$obj = json_decode($json_string);
print_r($json_string);
經(jīng)過(guò)這些處理后你會(huì)發(fā)現(xiàn)后臺(tái)PHP從數(shù)據(jù)庫(kù)讀出來(lái)的中文字符成功的轉(zhuǎn)成了json格式并且中文顯示一切正常!
當(dāng)然此時(shí)前臺(tái)接收到的數(shù)據(jù)就是JSON格式的了并且中文字符也是正常!
好了~~就是這些思路~網(wǎng)上方法有很多!看得有點(diǎn)亂~主要是記住思路!
然后就看用什么函數(shù)用什么方法解決相關(guān)編碼問(wèn)題就可以了!
比較煩那種JS前臺(tái)AJAX需要轉(zhuǎn)碼!后臺(tái)再解碼!有的還需要轉(zhuǎn)兩次!
目前我寫(xiě)的這些都是在PHP后臺(tái)語(yǔ)言代碼的情況下有效的.
前臺(tái)即使是GBK也不用作任何轉(zhuǎn)碼操作,全部只在后臺(tái)PHP代碼里面作相關(guān)轉(zhuǎn)換就可以了!!
網(wǎng)頁(yè)標(biāo)題:如何解決ajax傳到后臺(tái)php中文亂碼問(wèn)題
本文地址:http://m.fisionsoft.com.cn/article/cdosdpj.html


咨詢
建站咨詢
