PHPjson_encode中文亂碼解決方法(phpjson_encode;gt;5.2)
2021-01-31
使用php中內(nèi)置的json_encode()函數(shù)(可以使用php>5.2)。php中的數(shù)據(jù)可以與其他語言很好地傳輸并使用。
此功能的功能是將值轉(zhuǎn)換為json數(shù)據(jù)存儲(chǔ)格式。
'希亞', 'Age'=> ); $jsonencode = json_encode($arr); echo $jsonencode; ?>
程序運(yùn)行結(jié)果如下:
{“名稱”:null,“年齡”:}
json_encode函數(shù)中的中文被編碼為null。谷歌做了一點(diǎn)。這很簡(jiǎn)單。為了與前端緊密集成,Json僅支持utf編碼。我認(rèn)為前端Javascript也是utf-的原因。
iconv('gb','utf-','這里是中文標(biāo)題'), 'body'=>'abcd...' ); echo json_encode($array); ?>
該程序的運(yùn)行結(jié)果為:
{“ title”:“ \ u8fd9 \ u91cc \ u662f \ u4e2d \ u6587 \ u6807 \ u9898”,“ body”:“ abcd ...”}
出現(xiàn)json_encode或\ u2353等后,數(shù)組中的所有中文都消失了。
解決方案是使用urlencode()函數(shù)來處理以下內(nèi)容。在json_encode之前,使用urlencode()處理數(shù)組的所有內(nèi)容,然后使用json_encode()將其轉(zhuǎn)換為json字符串,最后使用urldecode()轉(zhuǎn)換回編碼后的中文。
) { 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--; } /************************************************************** * * 將數(shù)組轉(zhuǎn)換為JSON字符串(兼容中文) * @param array $array 要轉(zhuǎn)換的數(shù)組 * @return string 轉(zhuǎn)換得到的json字符串 * @access public * *************************************************************/ function JSON($array) { arrayRecursive($array, 'urlencode', true); $json = json_encode($array); return urldecode($json); } $array = array ( 'Name'=>'希亞', 'Age'=> ); echo JSON($array); ?>
這一次成功了,結(jié)果如下:
{“名稱”:“夏”,“年齡”:“ 20”}
讓我們介紹PHP json_encode中文亂碼的解決方案
我相信許多人在使用Ajax與后臺(tái)php頁面進(jìn)行交互時(shí)遇到了中文亂碼的問題。作為一種輕量級(jí)的數(shù)據(jù)交換格式,JSON非常流行。但是,將PHP用作背景交互會(huì)容易出現(xiàn)中文亂碼。 JSON與js相同??蛻舳松系淖址訳TF8的形式處理。也就是說,當(dāng)使用JSON作為提交和接收的數(shù)據(jù)格式時(shí),字符將以UTF8編碼進(jìn)行處理。當(dāng)我們的頁面編碼和數(shù)據(jù)庫(kù)編碼都沒有使用UTF8時(shí),極容易出現(xiàn)中文亂碼的問題。自然的解決方案是在使用js或PHP處理JSON數(shù)據(jù)時(shí)使用UTF8。
PHP5.2或更高版本使用json_encode作為內(nèi)置函數(shù),這為網(wǎng)站創(chuàng)建者帶來了極大的便利php json encode 編碼,但是我們必須注意json_encode僅支持UTF8編碼的字符,否則php json encode 編碼,中文亂碼或空值會(huì)出現(xiàn)。
解決方案分為以下兩個(gè)步驟。
Step1
使用JSON處理時(shí),請(qǐng)確保字符以UTF8編碼。具體來說,我們可以將數(shù)據(jù)庫(kù)編碼和頁面編碼更改為UTF8。當(dāng)然,如果您更喜歡使用gbk編碼,則可以在JSON處理之前將字符轉(zhuǎn)換為UTF8。 PHP中有以下方法:
Step2
后端PHP頁面(頁面編碼為UTF-8或字符已轉(zhuǎn)換為UTF-8)。請(qǐng)使用json_encode將PHP中的數(shù)組數(shù)組轉(zhuǎn)換為JSON字符串。例如:
'中文字符串','value'=>'test'); echo json_encode($testJSON); ?>
查看輸出結(jié)果為:
{“名稱”:“ \ u4e2d \ u6587 \ u5b57 \ u7b26 \ u4e32”,“值”:“測(cè)試”}
可以看出,即使使用UTF8編碼的字符,使用json_encode時(shí)也會(huì)出現(xiàn)中文亂碼。解決方案是先使用函數(shù)urlencode()處理字符,然后再使用json_encode,然后使用json_encode,并在輸出結(jié)果時(shí)使用函數(shù)urldecode()返回。詳細(xì)信息如下:
'中文字符串','value'=>'test'); //echo json_encode($testJSON); foreach ( $testJSON as $key => $value ) { $testJSON[$key] = urlencode ( $value ); } echo urldecode ( json_encode ( $testJSON ) ); ?>
查看輸出結(jié)果為:
{“名稱”:“中文字符串”,“值”:“測(cè)試”}
到目前為止,已經(jīng)成功輸出了漢字。隨時(shí)使用json_encode。這樣,在前面的javascript中,Ajax收到eval后,PHP后臺(tái)中輸出的JSON字符串將不會(huì)出現(xiàn)中文亂碼,因?yàn)閖s還在處理UTF8形式的JSON格式數(shù)據(jù),類似于PHP,因此PHP收到頁面。JSON字符串將不會(huì)有問題。
有關(guān)PHP json_encode()函數(shù)和有關(guān)中文亂碼問題的相關(guān)文章的詳細(xì)說明,請(qǐng)關(guān)注PHP中文網(wǎng)站!
相關(guān)標(biāo)簽:php json編碼函數(shù)亂碼本文最初發(fā)表于php中文網(wǎng)站,請(qǐng)注明轉(zhuǎn)載來源,謝謝?。?/p>