json_encode 處理后的數據是null


 

原因: json_encode($str) 中的字符串 必須是 utf-8的格式:

 

--------------------------------

問題描述:

返回的json數據:

 1 <?php
 2     $array = array();
 3     $rows = $parameter["list"];
 4     $User = $parameter["User"];
 5     $userId = $parameter["userId"];
 6     $data = '';
 7     $data.= '
 8         <table class="table table-striped table-hover">
 9             <tbody>';
10     foreach ($rows["rows"] as $row){
11         $data.= '<tr>
12                 <td  width="40px"><input type="checkbox" name="checkItem" value="'.$row->id.'" /></td>';
13         $data.= '<td width="200px">'.BaseUtil::setEntities($row->title).'</td>';
14                 $User->getDataById($row->userId);
15         $data.= '<td width="200px">'.BaseUtil::setEntities($User->userName).'</td>';
16         $data.= '<td width="200px">'.'<img style="width:100px;" src="'.UPLOAD_HTTP.$row->icon.'"/>'.'</td>';
17         $data.= '<td width="200px">'.BaseUtil::setEntities($row->orderBy).'</td>';
18         $data.= '<td width="200px">'.BaseUtil::setEntities($row->isOpenEnum[$row->isOpen]).'</td>';
19         $data.= '<td width="200px">
20                     <button type="button" class="btn btn-success btn-sm" onclick="base.addTab(\'知識點管理\',\'action.php?c=KnowledgeProxy&a=index&courseId='.$row->id.'\',\'課程管理\')">
21                         <span class="glyphicon glyphicon-pencil" style="color:#fff; cursor:pointer;"></span>&nbsp;
22                         知識點管理
23                     </button>
24                 </td>';
25         $data.= '<td  width="100px">
26                         <span class="table-list-btn glyphicon glyphicon-edit" title="編輯" style="color:#2e6da4; cursor:pointer;" onclick="base.showCourseUpdate('.$row->id.')"></span>&nbsp;
27                         <span class="table-list-btn glyphicon glyphicon-trash" title="刪除" style="color:#d43f3a; cursor:pointer;"  onclick="base.removeCourse('.$row->id.')"></span>&nbsp;
28                 </td>
29             </tr>';
30     }
31     $data.= '</tbody></table>';
32     $array ["data"] = $data;
33     $array ["total"] = $rows ["total"];
34     echo BaseUtil::toJson($array);
35 ?>

 

setEntities 方法:
1 /**
2      * 轉字符換為實體
3      *
4      * @param unknown $string
5      * @return string
6      */
7     public static function setEntities($string) {
8         return htmlentities ( $string);
9     }

 

出現的問題是 :

1)在公司里面 返回的json數據是正常的 . 例如:

  

2) 但是如果 是在家里 ,就出現錯誤. data 是null

   {data: null , total:3}

 

 同樣的代碼 ,只是因為在公司和 家中的php環境不同 就出現了不同的結果.

 

 

-----------

測試如果不使用:BaseUtil::setEntities($User->userName) 處理數據 ,直接用$User->userName 的話,在家中 就可以正常使用了.

 BaseUtil::setEntities 是對函數 htmlentities的封裝.

1 /**
2      * 轉字符換為實體
3      *
4      * @param unknown $string
5      * @return string
6      */
7     public static function setEntities($string) {
8         return htmlentities ( $string );
9     }

 

查閱php手冊中關於 htmlentities的描述:

 

可見,htmlentities 是要設置轉換的格式的, 如果沒有設置, 默認讀取 php配置文件中的 default_charset; 

 同時在 php 5.4 之后  ,默認的轉碼為 utf-8 .

同時 ,json_encode 要求 字符串必須是utf-8的.

 

-------

所以問題 就是 我公司的電腦的php版本大於 5.4 ,使用 封裝的BaseUtil::setEntities 自動轉為 utf-8 ; 家中的電腦的php版本 低於5.4

 

----

解決辦法:

第一: 將家中電腦的php.ini  的 default_charset 設置為 utf-8 , 但是沒有起作用.

第二: 重寫 BaseUtil::setEntities ,指定格式 . 此時家中 可以正常使用了.

1 /**
2      * 轉字符換為實體
3      *
4      * @param unknown $string
5      * @return string
6      */
7     public static function setEntities($string) {
8         return htmlentities ( $string,  ENT_COMPAT  , 'utf-8' );
9     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM