1. 程式人生 > >PHP JSON_DECODE/JSON_ENCODE中文內容為NULL或亂碼

PHP JSON_DECODE/JSON_ENCODE中文內容為NULL或亂碼

<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($json, true));

?>

輸出結果

object(stdClass)#1 (5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

完全正確沒有任何問題,那麼我們測試中文

<?php
$json = '{"a":"中國人人"}';

var_dump(json_decode($json));

?>

結果

{"text":null,"status":1}

後來從php手冊中得出,json_encode 和 json_decode只支援utf-8編碼的字元,GBK的字元要用json就得轉換一下,這樣我們就好辦了

轉換一個編碼

/*
    字串GBK轉碼為UTF-8,數字轉換為數字。
*/
function ct2($s){
    if(is_numeric($s)) {
        return intval($s);
    } else {
        return iconv("GBK","UTF-8",$s);
    }
}
/*
    批量處理gbk->utf-8
*/
function icon_to_utf8($s) {
  if(is_array($s)) {
    foreach($s as $key => $val) {
      $s[$key] = icon_to_utf8($val);
    }
  } else {
      $s = ct2($s);
  }
  return $s;
}
echo json_encode(icon_to_utf8("廈門"));

這樣還是有時會有問題,後來找了一種在json_encode之前,把所有陣列內所有內容都用urlencode()處理一下,然用json_encode()轉換成json字串,最後再用urldecode()將編碼過的中文轉回來。

寫了個函式

/**************************************************************
*
*    使用特定function對陣列中所有元素做處理
*    @param    string    &$array        要處理的字串
*    @param    string    $function    要執行的函式
*    @return boolean    $apply_to_keys_also        是否也應用到key上
*    @access public
*
*************************************************************/
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
    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]);
            }
        }
    }
}
/**************************************************************
*
*    將陣列轉換為JSON字串(相容中文)
*    @param    array    $array        要轉換的陣列
*    @return string        轉換得到的json字串
*    @access public
*
*************************************************************/
function JSON($array) {
    arrayRecursive($array, 'urlencode', true);
    $json = json_encode($array);
    return urldecode($json);
}


相關推薦

PHP JSON_DECODE/JSON_ENCODE中文內容NULL亂碼

<?php $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json)); var_dump(json_decode($json, true)); ?> 輸出結果 obj

mysql使用存儲過程插入數據後,參數中文亂碼

做了 cnblogs 現象 顯示 題解 中文 原因 png 操作 最近了解了一下mysql存儲過程,之前版本的mysql不支持存儲過程,5.0版本後就可以支持存儲過程的使用;恰好筆者下載使用版本為5.6.20: 做了一個給表插入數據的簡單存儲過程,發現打開表後漢字全部

php 伺服器端解決json_decode()的bug 輸出null, json_last_error函式4語法錯誤

php 伺服器端解決json_decode() bug 問題: 問題描述: json_decode() 轉換json字串時輸出結果為 null,函式返回值為false 出現問題的分析: 1

SCRIPT5007:無法獲取屬性“show”的值,對象null沒有定義

dojo show post nbsp gb2 data scrip con style 1、錯誤描寫敘述 SCRIPT5007:無法獲取屬性“show”的值,對象為null或沒有定義 dojo.js,行15.字符11808 2、錯誤原因

php 解決json_encode中文UNICODE轉碼問題

*** www. str .com 再次 alt pan 進行 可讀的 原文地址:php 解決json_encode中文UNICODE轉碼問題用PHP的json_encode來處理中文的時候, 中文都會被編碼, 變成不可讀的, 類似"\u***"的格式,如果想漢字不進行轉碼

php實現json_encode()中文字元不轉義

在專案中,php提供的介面使用json_encode()函式,在處理中文的時候, 中文都會被編碼成Unicode碼, 變成不可讀的, 類似”\u***”的格式,如果想漢字不進行轉碼,這裡提供三種方法 1.php版本在5.3及以下自己寫函式實現中文不轉義 function json_encod

Redhat Linux AS4中行動硬碟自動載入後中文內容亂碼

2006-07-29 這個挺傷腦筋, 因為大容量的東西通過網路傳輸比較慢,而在Linux下卻不知裡面是什麼。 先確定locale: ># locale LANG=zh_CN.UTF-8 LC_CTYPE="zh_CN.

echarts 無法獲取屬性“getAttribute”的值: 物件 null 未定義 錯誤解決方法

  使用百度的echarts時,在IE9下執行時有時會報如題的錯誤,有時重新整理下又正常,造成這種錯誤的原因是 echarts.js引用放在head中或者放在body中HTML程式碼的前面了,造成載入時阻塞後面的html。 解決方法就是將echarts.js的引用放在<

phpjson_encode()中文編碼問題

今天,看東西,突然看到之前寫的程式碼,得記錄下來,不然又遺忘了! php 5.4.0之前,json_encode() 是不支援 中文編碼的 5.4.0之後,json_encode()新增了 JSON_UNESCAPED_UNICODE 選項,支援了中文,我們得寫一個相容函式

json_decode轉換json資料null

經常使用json_decode()轉換json字串,一直都很順利,然而今天碰到了一個頭疼的問題,json字串轉換過之後一直為null。 上網搜尋了下,可以使用json_last_error()函式來檢

PHP+MYSQL+JQUERY實現內容的篩選實時搜尋

這是本人做的一個通訊錄例項。可實時查詢<?php include ("menu.php"); include ("head.php"); ?> <!-- 引入jQuery --> <script src="jquery-1.7.2.

PHPjson_encode中文被轉碼的問題 在php5.2中做json_encode的時候。中文會被unicode編碼, php5.3加入了options引數, 5.4以後才加入JSON_U

在php5.2中做json_encode的時候。中文會被unicode編碼, php5.3加入了options引數, 5.4以後才加入JSON_UNESCAPED_UNICODE,這個引數,不需要做escape和unicode處理。 所以在5.4之前都需要對中文做個處理

jquery 判斷文字框null 過濾空格

 function isNullObj(obj){if(obj==null){return true; }else if(obj.replace(/\s*/g,"")==""){return true; }else{return false; }  } 簡單一點過濾空格

springMVC 對引數null引數不null的處理

前臺傳給後臺的引數有時是不固定的,有些引數可能有,有些可能沒有,比如獲取定位的gps,有的使用者有開gps,就有gps引數,有些沒有,就沒有gps引數,因此,我想讓這些引數成為可選的,如果沒有傳入,則可

PHPjson_encode中文處理、urlencode方法、post中文亂碼

  今天在用HttpClient的PostMethod模擬瀏覽器用表單的post方法傳送資料給伺服器的時候,如果資料是中文,伺服器接收的是亂碼,然後看了很多亂碼的文章,最後解決了,現在總結下.   1.首先搞清楚客戶端是用那種編碼方式將資料編碼後提交的. 瀏覽器在form提交後,會生成一個HTTP的頭部資訊"

.NET判斷對象判不null"""undefined"

als pub turn str def min equal == orb public static bool isNotNullOrBlank(Object obj) { if (obj == null || obj.ToString

zabbix圖形頁面資料欄位顯示方框亂碼

摘要: 本文講的是zabbix圖形頁面資料欄位顯示為方框或亂碼, zabbix圖形頁面資料欄位顯示為方框或亂碼 1、因zabbix使用的DejaVuSan.ttf字型,不支援中文,導致中文出現亂碼,它的位置(A)為:/var/www/html/zabbix/fonts; zabbix圖形頁面資料欄位顯示為方

zabbix圖形頁面數據字段顯示方框亂碼

欄目 nts http 51cto 顯示 修改 頁面 人物 rap 摘要: 本文講的是zabbix圖形頁面數據字段顯示為方框或亂碼, zabbix圖形頁面數據字段顯示為方框或亂碼 1、因zabbix使用的DejaVuSan.ttf字體,不支持中文,導致中文出現亂碼,它的位置

vc2010中mfc/com選單、控制元件等漢字顯示問號亂碼的解決方法

在vc2008中建立基於mfc的project。在嚮導的Application type頁面中如果在resource language選項中選擇“英語(美國)”(圖一),那麼在project中的設定選單或者控制元件(如button)上的漢字會最終顯示為“?”。有幾個漢字就

PHP將資料庫查詢內容轉換JSON格式且顯示中文

最近寫android,開始寫伺服器了。最終伺服器的語言就先定為PHP,因為以前寫過一陣子網頁,所以就先用PHP試試水。 那麼首先為了實現android前端與伺服器互動,那麼我們伺服器傳輸的資料就要先變為JSON格式。 那麼如何將資料庫中的內容查詢出來,並且使其轉變為JSON格式呢?程式碼如下