㈠ 如何正確運用PHP json_encode函數進行中文轉換
php $json = array (0 =>array ('id' => '13', 'name' => '乒乓球',), 1 =>array ('id' => '17', 'name' => '籃球',))?> 如果直接用PHP json_encode函數<?php echo json_encode($json); > 結果為:<?php [{"id":"13","name":null} ,{"id":"13","name":null}] > 可以看到漢字沒有被轉義都為null,這是因為json僅僅轉義encoding編碼(類似於:%B0%AE),故上面語句應該先轉換編碼<?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',
㈡ 如何正確運用PHP json_encode函數進行中文轉換
在 php 中使用 json_encode() 內置函數(php > 5.2)可以使用得 php 中數據可以與其它語言很好的傳遞並且使用它。這個函數的功能是將數值轉換成json數據存儲格式,但是轉換後的中文會變成Unicode編碼。
[php] view plainprint?
<?php
$arr = array
(
'Name'=>'希亞',
'Age'=>20
);
$jsonencode = json_encode($arr);
echo $jsonencode;
?>
程序運行結果如下:
[php] view plainprint?
{"Name":null,"Age":20}
json_encode 函數中中文被編碼成 null 了,Google 了一下,很簡單,為了與前端緊密結合,Json 只支持 utf-8 編碼,我認為是前端的 Javascript 也是 utf-8 的原因。
[php] view plainprint?
<?php
$array = array
(
'title'=>iconv('gb2312','utf-8','這里是中文標題'),
'body'=>'abcd...'
);
echo json_encode($array);
?>
這個程序的運行結果為:
[php] view plainprint?
{"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd..."}
數組中所有中文在json_encode之後都不見了或者出現\u2353等。解決方法是用urlencode()函數處理以下,在json_encode之前,把所有數組內所有內容都用urlencode()處理一下,然用json_encode()轉換成json字元串,最後再用urldecode()將編碼過的中文轉回來。
[php] view plainprint?
<?php
/**************************************************************
*
* 使用特定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)
{
static $recursive_counter = 0;
if (++$recursive_counter > 1000) {
die('possible deep recursion attack');
}
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]);
}
}
}
$recursive_counter--;
}
/**************************************************************
*
* 將數組轉換為JSON字元串(兼容中文)
* @param array $array 要轉換的數組
* @return string 轉換得到的json字元串
* @access public
*
*************************************************************/
function JSON($array) {
arrayRecursive($array, 'urlencode', true);
$json = json_encode($array);
return urldecode($json);
}
$array = array
(
'Name'=>'希亞',
'Age'=>20
);
echo JSON($array);
?>
這次成功了,運行結果如下:
[php] view plainprint?
{"Name":"希亞","Age":"20"}
㈢ json_encode的解決方法
在json_encode() 函數 使用參數:JSON_UNESCAPED_UNICODE
json_encode($arr, JSON_UNESCAPED_UNICODE); 也可以嘗試使用這個簡短的方法:
function jsonEncodeWithCN($data) {
return preg_replace(/\u([0-9a-f]{4})/ie, iconv('UCS-2BE', 'UTF-8', pack('H4', '$1')), json_encode($data));
}
如果是php5.4以前的版本使用以下方法 <?php
* 處理json_encode() 不支持中文的情況
*
* 實際應用中,當有中文字元時,當直接使用json_encode() 函數會使漢字不能正常顯示
* 所以有了這個適用性比較廣的函數 ch_json_encode()來解決這個問題
*
* charset: UTF-8
* create date: 2012-7-8
* @author Zhao Binyan
* @right (C) 2011-2012 itbdw
*//**
* 處理 json_encode() 不支持中文的情況
*
* @param array|object $data
* @return array|object
*/
function ch_json_encode($data) {
/**
* 將中文編碼
* @param array $data
* @returnstring
*/
function ch_urlencode($data) {
if (is_array($data) || is_object($data)) {
foreach ($dataas$k => $v) {
if (is_scalar($v)) {
if (is_array($data)) {
$data[$k] = urlencode($v);
} elseif (is_object($data)) {
$data->$k =urlencode($v);
}
} elseif (is_array($data)) {
$data[$k] = ch_urlencode($v);//遞歸調用該函數
} elseif (is_object($data)) {
$data->$k = ch_urlencode($v);
}
}
}
return$data;
}
$ret = ch_urlencode($data);
$ret =json_encode($ret);
return urldecode($ret);
}
注意,字元編碼必須是 utf-8 。
使用json_encode
Json 做為一種輕量級的數據交換格式,開始受到青睞,有與 XML 搶地盤的風頭。而讓人高興的是,php也把 json 序列化數據的功能內置成函數了,這讓想使用json的 PHPCoder 備感方便。美中不足的是,json_encode / json_decode 系列函數只有在 php5.2 以上才有。這讓立志開發兼容性強的PHP系統的coder很頭痛。幸好,已經有人把 json 的方法封裝成 php4.x 系列甚至更低的版本都可以執行的類了。這里要先謝謝先驅了。讓我們可以踩在巨人的肩膀上走向成功。
使用方法:
if( function_exists(json_encode) ){return json_encode($phparr);}else{require_once ROOT.include/json.class.php;$json = new Services_JSON;return $json->encode($phparr);}?>
㈣ php多維數組怎麼轉換成json格式
json_encode只能將utf8的字元轉換成json字元串,如果你的代碼格式不是utf8是無法轉換的,會返回false,在轉換之前,將數組中的值循環設置成utf8,遍歷一次數組即可。然後再使用json_encode就可以了
㈤ php使用json_encode把二維數組變為json格式,Javascrpt如何變回數組
ajax的時候讓返回的文本類型設為JSON,然後直接json[0]['id']調用;
你這個返回的就是個JSON數組,所以返回以後PHP變數怎麼調用的,JS變數同樣調用就可以了!
比如PHP代碼是
$json[0]['id'] = 1;
那麼JS就是
json[0]['id']調用
㈥ PHP json_encode 變數如何轉換成數組
1json_decode(json數據, true); //得到一個數組
json_encode()函數和json_decode()是一對函數
作用專剛好相反
一個是屬將數組轉換成json數據
一個是將json數據轉換成數組
㈦ 在PHP使用json_encode
Json
做為一種輕量級的數據交換格式,開始受到親睞,有與
XML
搶地盤的風頭。而讓人高興的是,php也把
json
序列化數據的功能內置成函數了,這讓想使用json的
PHPCoder
備感方便。
美中不足的是,json_encode
/
json_decode
系列函數只有在
php5.2
以上才有。這讓立志開發兼容性強的PHP系統的coder很頭痛。
幸好,已經有人把
json
的方法封裝成
php4.x
系列甚至更低的版本都可以執行的類了。這里要先謝謝先驅了。讓我們可以踩在巨人的肩膀上走向成功。
這里了解更多:http://code.itlearner.com/php/JSON-class.html
使用方法:
if(
function_exists("json_encode")
)
{
return
json_encode($phparr);
}
else
{
require_once
ROOT."include/json.class.php";
$json
=
new
Services_JSON;
return
$json->encode($phparr);
}