php的json_encode不支援JSON_UNESCAPED_UNICODE解決辦法

來源:互聯網
上載者:User


我們知道, 用PHP的json_encode來處理中文的時候, 中文都會被編碼, 變成不可讀的, 類似”\u***”的格式, 還會在一定程度上增加傳輸的資料量.

<?php
echo json_encode("中文");
 
//"\u4e2d\u6587"

這就讓我們這些在天朝做開發的同學, 很是頭疼, 有的時候還不得不自己寫json_encode.

而在PHP5.4, 這個問題終於得以解決, Json新增了一個選項: JSON_UNESCAPED_UNICODE, 故名思議, 就是說, Json不要編碼Unicode.

看下面的例子:

<?php
echo json_encode("中文", JSON_UNESCAPED_UNICODE);
 
//"中文"

怎麼樣, 是不是讓大家很開心的改動? 呵呵, 當然, Json在5.4還加入了: JSON_BIGINT_AS_STRING, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES等選項

HP5.4才支援JSON_UNESCAPED_UNICODE這個參數,此參數是讓中文字元在json_encode的時候不用轉義,減少資料轉送量。但在PHP5.3中,就得自己寫個函數來實現,以下就是解決方案:


/**
* 對變數進行 JSON 編碼
* @param mixed value 待編碼的 value ,除了resource 類型之外,可以為任何資料類型,該函數只能接受 UTF-8 編碼的資料
* @return string 返回 value 值的 JSON 形式
*/
function json_encode_ex($value)
{
    if (version_compare(PHP_VERSION,'5.4.0','<'))
    {
        $str = json_encode($value);
        $str = preg_replace_callback(
                                    "#\\\u([0-9a-f]{4})#i",
                                    function($matchs)
                                    {
                                         return iconv('UCS-2BE', 'UTF-8', pack('H4', $matchs[1]));
                                    },
                                     $str
                                    );
        return $str;
    }
    else
    {
        return json_encode($value, JSON_UNESCAPED_UNICODE);
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.