這篇文章主要講解了“php ajax獲取中文亂碼的問題怎么解決”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“php ajax獲取中文亂碼的問題怎么解決”吧!
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊、網(wǎng)站空間、營銷軟件、網(wǎng)站建設、湖里網(wǎng)站維護、網(wǎng)站推廣。
本文操作環(huán)境:windows7系統(tǒng)、PHP7.1版,DELL G3電腦
php ajax獲取中文亂碼怎么辦?
PHP中AJAX應用中文亂碼解決方法
web應用開發(fā)中經(jīng)常出現(xiàn)中文亂碼情況!
今天主要整理下思路:
出現(xiàn)亂碼的大多數(shù)情況是我們進行AJAX時所遇到的!因為直接數(shù)據(jù)庫讀取是不會有任何編碼上的問題的~
1.從前臺JS提交數(shù)據(jù)到后臺的情況下
AJAX數(shù)據(jù)時,不管是直接用底層xmlHttprequest還是用jQuery的ajax進行數(shù)據(jù)傳遞時!ajax都會使用utf-8進行編碼后發(fā)送!
如果我們的頁面是UTF-8那沒有問題!傳遞過去的中文數(shù)據(jù)不會亂碼!
如果是GB2312的話~問題就來了!GBK被UTF-8轉(zhuǎn)換后發(fā)送到后臺,這時后臺直接接收到的已經(jīng)亂碼了!
(解決方法:后臺語言為PHP的情況下,iconv('utf-8','gb2312',$_POST['Data']);)
原理很簡單:后臺直接接收是utf-8,而頁面都是GBK,那只要把接收到的數(shù)據(jù)再重新轉(zhuǎn)回為GBK就可以了!
這時再做數(shù)據(jù)庫操作就可以了!存入數(shù)據(jù)庫里的必定是正常的中文字符了!
2.后臺頁面讀取到數(shù)據(jù)庫里數(shù)據(jù)中含有中文字符,此時再回傳到JS前臺的情況下
PHP頁面從數(shù)據(jù)庫里讀取到了正常的中文字符想通過AJAX再回傳回去~
如果傳遞回去只是把數(shù)據(jù)不作任何處理直接以字符串的形式傳回去!這是沒有問題的!中文在前臺頁面上顯示一切正常!
但后臺數(shù)據(jù)我們一般是需要包裝一下!不然前臺接收到的數(shù)據(jù)會很難處理!
如果是PHP的話!那么我們現(xiàn)在一般用JSON進行傳遞!這樣傳遞到前臺JS的數(shù)據(jù)就會非常容易解開并操作!
在PHP后臺進行json轉(zhuǎn)換操作時,問題就來了!
json轉(zhuǎn)換時會發(fā)現(xiàn)從數(shù)據(jù)庫讀取出來的中文又出現(xiàn)NULL或其它不正常的情況,這是因為JSON只轉(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)過這些處理后你會發(fā)現(xiàn)后臺PHP從數(shù)據(jù)庫讀出來的中文字符成功的轉(zhuǎn)成了json格式并且中文顯示一切正常!
當然此時前臺接收到的數(shù)據(jù)就是JSON格式的了并且中文字符也是正常!
好了~~就是這些思路~網(wǎng)上方法有很多!看得有點亂~主要是記住思路!
然后就看用什么函數(shù)用什么方法解決相關編碼問題就可以了!
比較煩那種JS前臺AJAX需要轉(zhuǎn)碼!后臺再解碼!有的還需要轉(zhuǎn)兩次!
目前我寫的這些都是在PHP后臺語言代碼的情況下有效的.
前臺即使是GBK也不用作任何轉(zhuǎn)碼操作,全部只在后臺PHP代碼里面作相關轉(zhuǎn)換就可以了!!
感謝各位的閱讀,以上就是“php ajax獲取中文亂碼的問題怎么解決”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對php ajax獲取中文亂碼的問題怎么解決這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!