<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            php語言

            php處理json時中文問題的解決方法

            時間:2025-05-13 04:34:42 php語言 我要投稿
            • 相關推薦

            php處理json時中文問題的解決方法

              在項目里面用到json操作,之前測試都是很正常的,但有時候把對象轉換成json的時候,其中有個中文屬性變成了null.遇到這種情況怎么辦呢?下面小編為大家整理了php處理json時中文問題的解決方法,希望能幫到大家!

              操作的代碼如下:

              復制代碼 代碼如下:

              $usr = new User();

              echo json_encode($usr);

              ?>

              很簡單的代碼,無中文情況一切正常,輸出如下:

              {"PlatformID":"123213","UserID":"1023"}

              一旦有中文的時候會出現兩種情況。

              第一種情況是對象本身的某個值為中文的屬性是utf-8編碼,則會有如下輸出:

              {"PlatformID":"123213","UserID":"1023","UserName":"u00b7u00f0u00b5u00b2u00c9u00b1u00b7u00f0u00ccu00fc"}

              其中的UserName是非人類語言,這個是正常的,如果我們用firebug看下就是中文的。(這個糾結了我半天)

              第二種情況是非utf-8編碼,輸出會變成null:

              {"PlatformID":"123213","UserID":"1023","UserName":null}

              很奇怪,查了手冊后知道json_encode是只對utf-8有效,其它編碼均會變為null.

              下面就開始解決編碼轉化的問題。

              在php.net上看到別人的函數如下:

              復制代碼 代碼如下:

              private function to_utf8($in)

              {

              if (is_array($in)) {

              foreach ($in as $key => $value)

              {

              $out[$this->to_utf8($key)] = $this->to_utf8($value);

              }

              }

              elseif(is_string($in))

              {

              if(mb_detect_encoding($in) != "UTF-8")

              return utf8_encode($in);

              else

              return $in;

              }

              else

              {

              return $in;

              }

              return $out;

              }

              于是拿下來轉換編碼發現已經不為null.欣喜之下用firebug打開,發現并不是我原來的中文字符....開始糾結......

              難道是要讓他轉換成原來的編碼?回去尋找原始編碼......

              測試開始:

              1.把$usr->UserName直接輸出,頁面頭設置charset=utf-8.亂碼

              2.echo json_encode($usr)輸出UserName=null

              3.頁面頭設置為charset=gbk,輸出正確->可以確定原編碼為gbk

              最后通過IE,Chrome,Firefox測試得出結論:

              1.保證頁面字符集與數據庫一致,輸出一定正常 。

              2.做json_encode時保證數據編碼是utf-8,json_decode正常。

              3.如果要對非utf-8字符做json_encode,先轉換成utf-8。

              4.對非utf-8字符做json_decode的時候,千萬不能忘記轉換成原先的編碼,否則會輸出亂碼!

            【php處理json時中文問題的解決方法】相關文章:

            PHP處理JSON字符串key缺少雙引號的解決方法10-07

            PHP中json-encode格式中文問題解決辦法10-27

            PHP中Json應用09-05

            關于php中文亂碼的解決方法07-09

            解決PHP中文亂碼問題05-27

            php關閉warning問題的解決方法10-11

            完美解決PHP中文亂碼問題07-18

            php各種應用亂碼問題的解決方法05-31

            php數組轉成json格式的方法09-26

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看