我們今天將要為大家帶來的內容是PHP json_encode函數在處理中文轉換時出現問題的解決方法。json 是一個很好的數據結構現在已經廣泛用在網絡數據傳輸上,
json_encode 和 json_decode
這兩個函數的具體用法 網上有很多相關的文章 ,本文主要介紹 用json_encode 時 中文無法轉換的解決方案,本文假設文件所用的編碼為gb2312;
先寫出所需的數組
如果直接用PHP json_encode函數
- < ?PHP
- echo json_encode($json);
- ?>
結果為:
- < ?PHP
- [{"id":"13","name":null}
,{"id":"13","name":null}]- ?>
可以看到漢字沒有被轉義 都為null,這是因為json僅僅轉義encoding編碼,故上面語句應該先轉換編碼
- < ?PHP
- foreach ($ajax as $key=>$val)
- {
- $ajax[$key]['name'] =
urlencode($val['name']);- }
- echo json_encode($json);
- ?>
客戶端js代碼
- < script type="text/javascript">
- function getsort(obj)
- {
- $.ajax(
- {
- type : "GET",
- url : "< ?=$this->baseUrl?>/index/getajax",
- data : "c=" obj.value,
- success : function(json)
- {
- var json=eval(json);
- var html = '< select>';
- $.each(json, function(k)
- {
- html = '< option value="'
json[k]['id'] '">'
decodeURI(json[k]['name']) '< /option>';- });
- html ="< /select>";
- $('#sort').html(html);
- }
- }
- )
- }
- < /script>
用上面的代碼js會報錯 說編碼不符合標准
原因是因為js 中decodeURI 僅僅支持utf8 轉碼。所以 ,PHP json_encode函數的代碼應該為下面的代碼
- < ?PHP
- foreach ($ajax as $key=>$val)
- {
- $ajax[$key]['name'] =
urlencode(iconv('gb2312',
'utf-8',$val['name']));- }
- echo json_encode($json);
- ?>
以上就是使用PHP json_encode函數在實際操作中出現問題的解決方法。