中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

phpjsonencode編碼pHp項(xiàng)目中遇到中文亂碼怎么辦?有解決方法嗎?

2023-12-06    分類: 網(wǎng)站建設(shè)

pHp項(xiàng)目中經(jīng)常遇到中文亂碼,這是一個(gè)令人討厭的問(wèn)題。但是,當(dāng)需要將內(nèi)容輸出到網(wǎng)頁(yè)時(shí),我們遵循以下兩個(gè)原則,并且通常不會(huì)出現(xiàn)中文亂碼。

首先是添加html頭

第二點(diǎn)是確保文件的編碼與meta設(shè)置的編碼一致。換句話說(shuō),如果我們的第一個(gè)字符集設(shè)置為UTF-8,那么我們的文件編碼也應(yīng)該設(shè)置為UTF-8。兩者應(yīng)該保持一致。

當(dāng)然,以上是針對(duì)網(wǎng)頁(yè)的情況,但是現(xiàn)在隨著Ajax在Web應(yīng)用程序中所占的比例越來(lái)越高,json格式的數(shù)據(jù)在數(shù)據(jù)傳輸中的使用越來(lái)越廣泛。因此,當(dāng)您使用json_encode在pHp中將數(shù)據(jù)轉(zhuǎn)換為json時(shí),會(huì)遇到中文亂碼或中文編碼的問(wèn)題。

例如,

$data = array('id'=>1,'name'=>'跡憶博客','parId'=>0);
echo json_encode($data);

以上代碼的輸出結(jié)果為

{"id":1,"name":"\u8ff9\u5fc6\u535a\u5ba2","parId":0}

讓我們看一下,該功能已對(duì)中文“集意博客”進(jìn)行了十六進(jìn)制轉(zhuǎn)碼。不能說(shuō)這是一個(gè)錯(cuò)誤,因?yàn)槭M(jìn)制表示形式是正確的中文。得到此結(jié)果后php json encode 編碼,我們還可以通過(guò)前端的js獲得所需的結(jié)果。但是,以這種方式使用仍然很麻煩。當(dāng)然,情況會(huì)因pHp版本而異。

對(duì)于某些版本的pHp,結(jié)果將如下所示

{"id":1,"name":null,"parId":0}

中文無(wú)法正確解析。

沒有辦法,中國(guó)問(wèn)題太麻煩了。誰(shuí)使計(jì)算機(jī)不是中國(guó)人發(fā)明的?當(dāng)然,有解決方案。讓我們了解兩種解決方案。

一、由json_encode的第二個(gè)參數(shù)解決

為解決上述問(wèn)題,可以通過(guò)json_encode函數(shù)本身直接解決pHp> =5.4.0的版本。那是第二個(gè)參數(shù)加上JSON_UNESCApED_UNICODE。

$data = array('id'=>1,'name'=>'跡憶博客','parId'=>0);
echo json_encode($data, JSON_UNESCApED_UNICODE);

現(xiàn)在您可以獲得正確的結(jié)果

{"id":1,"name":"跡憶博客","parId":0}

正確獲得了結(jié)果。但是,pHp的版本不能更改為5.4及更高版本。如何處理5.4以下的版本?

二、通過(guò)url編碼解決中文問(wèn)題

我們知道pHp中有兩個(gè)函數(shù):urlencode和urldecode。我們可以使用urlencode函數(shù)對(duì)中文進(jìn)行url編碼,這樣字符串中就不會(huì)再有中文了,也不會(huì)遇到中文編碼問(wèn)題。

$str = “跡憶博客”;
echo urlencode($str);

對(duì)Jiyi博客進(jìn)行網(wǎng)址編碼,結(jié)果如下

%E8%bF%b9%E5%bF%86%E5%8D%9A%E5%AE%A2

因此,在使用urlencode編碼上述數(shù)組的名稱的值,然后將其轉(zhuǎn)換為json格式后,中文編碼的問(wèn)題將不復(fù)存在。

我們現(xiàn)在得到的結(jié)果是名稱編碼后的json字符串

{"id":1,"name":"%E8%bF%b9%E5%bF%86%E5%8D%9A%E5%AE%A2","parId":0}

最后,通過(guò)urldecode對(duì)url編碼的字符串進(jìn)行解碼。當(dāng)然,urldecode解碼不需要我們找到相應(yīng)的編碼字符串進(jìn)行解碼。我們可以直接解碼整個(gè)字符串。 urldecode將自動(dòng)檢測(cè)相應(yīng)的url編碼的字符串并將其解碼。

$data = array('id'=>1,'name'=>urlencode('跡憶博客'),'parId'=>0);
$res =urldecode(json_encode($data));
echo $res;

所以結(jié)果是正確的

{"id":1,"name":"跡憶博客","parId":0}

此方法沒有版本限制php json encode 編碼,但是效率肯定會(huì)比第一種方法慢。

第二種方法的包裝函數(shù)-通過(guò)url編碼解決中文問(wèn)題

現(xiàn)在是問(wèn)題所在。對(duì)于第二種方法,我們不能在數(shù)組中的每個(gè)中文前面添加urlencode函數(shù)!這也是不現(xiàn)實(shí)的。然后,我們可以通過(guò)自己封裝json_encode函數(shù)來(lái)解決此類問(wèn)題。

代碼如下

function onmpw_json_encode($data){
        if(is_object($data)) return false;
        if(is_array($data)){
            $data = deal_array($data);
        }
        return urldecode(json_encode($data));
}
function deal_array($data){
     if (is_array($data)) {
        foreach ($data as $key => $val) {
            if (is_array($val)) {
                                     //如果是多維數(shù)組,通過(guò)遞歸來(lái)處理多維數(shù)組
                $data[$key] = deal_array($val);
            } else {
                                     //對(duì)值進(jìn)行url編碼
                $data[$key] = urlencode($val);
            }
        }
    } elseif (is_string($data)) {
        $data = urlencode($data);
    }
    return $data;
}
下面我們來(lái)看一個(gè)使用示例
$data = array(
            array('id'=>1,'name'=>'跡憶博客','parId'=>0),
            array('id'=>2,'name'=>'學(xué)無(wú)止境','parId'=>1),
            array('id'=>3,'name'=>'趣味雜談','parId'=>1),
            array('id'=>4,'name'=>'編程語(yǔ)言','parId'=>2),
            array('id'=>5,'name'=>'網(wǎng)絡(luò)','parId'=>2),
            array('id'=>6,'name'=>'算法','parId'=>2),
            array('id'=>7,'name'=>'操作系統(tǒng)','parId'=>2),
            array('id'=>8,'name'=>'數(shù)據(jù)庫(kù)','parId'=>2),
            array('id'=>9,'name'=>'WEb前端','parId'=>2),
            array('id'=>10,'name'=>'讀書','parId'=>3),
            array('id'=>11,'name'=>'觀點(diǎn)與感想','parId'=>3)
        );
$data = onmpw_json_encode($data);
echo $data;

現(xiàn)在我們有了想要的結(jié)果

[{"id":"1","name":"跡憶博客","parId":"0"},{"id":"2","name":"學(xué)無(wú)止境","parId":"1"},{"id":"3","name":"趣味雜談","parId":"1"},{"id":"4","name":"編程語(yǔ)言","parId":"2"},{"id":"5","name":"網(wǎng)絡(luò)","parId":"2"},{"id":"6","name":"算法","parId":"2"},{"id":"7","name":"操作系統(tǒng)","parId":"2"},{"id":"8","name":"數(shù)據(jù)庫(kù)","parId":"2"},{"id":"9","name":"WEb前端","parId":"2"}, {"id":"10","name":"讀書","parId":"3"},{"id":"11","name":"觀點(diǎn)與感想","parId":"3"}]

中文編碼問(wèn)題非常普遍,我們都需要根據(jù)實(shí)際情況進(jìn)行更多總結(jié)。您可以輕松解決將來(lái)的開發(fā)中的類似問(wèn)題。

對(duì)于上面的自定義json_encode函數(shù),我將其封裝在一個(gè)公共類中。源代碼在github上,我將繼續(xù)將一些常用功能封裝到該公共類中。歡迎下載。希望這對(duì)大家有幫助。

網(wǎng)站題目:phpjsonencode編碼pHp項(xiàng)目中遇到中文亂碼怎么辦?有解決方法嗎?
標(biāo)題鏈接:http://m.2m8n56k.cn/news12/299412.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器標(biāo)簽優(yōu)化網(wǎng)站策劃品牌網(wǎng)站設(shè)計(jì)定制網(wǎng)站建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
主站蜘蛛池模板: 一级特一级特色生活片 | 亚洲一区免费看 | 夜色邦合成福利网站 | 国产精品私人玩物在线观看 | 男女猛烈无遮掩免费视频 | 一本三道a无线码一区v小说 | 日本一区二区三区在线 视频观看免费 | 自拍视频啪 | 欧美色视频在线观看 | 成人一级免费视频 | 97免费视频免费视频 | 欧美一级看片a免费观看 | 蝴蝶成人世界第八影院 | 亚洲精品国产一区二区三 | 精品一区二区三区中文字幕 | 久久三级国产 | 91精品国产91久久久久青草 | 日本一级做人免费视频 | 蕾丝视频永久在线入口香蕉 | 国产一区二区中文字幕 | 国产成人精品日本亚洲语音1 | 久久久久久久久性潮 | 国产精品久久久久激情影院 | 亚洲第一大网站 | 久久久久久99精品 | 97在线国产视频 | 在线 | 一区二区三区四区 | 精品在线播放 | 午夜综合 | 国产成人精品亚洲一区 | 日日狠狠久久偷偷四色综合免费 | 欧美日韩一区二区三区在线视频 | 国产亚洲人成网站在线观看 | 自拍三级视频 | 一级毛片情侣 | 国产日韩线路一线路二 | 视频一区在线观看 | 日本一区二区三区高清福利视频 | 欧美亚洲国产日韩一区二区三区 | 午夜影院啪啪 | 久久草在线视频免费 |