2016-11-21 116 views
1

我有文本文件中的数据,我加载到数组行明智,但最近我已经注意到,当“μ”进入数据然后json_encode重试空白响应,并且当我从数据中删除“μ”然后json_encode函数工作php json_encode错误补丁

我有PHP版本5.5.3

$dat = array("0"=>"hello","1"=>"world"); 
echo json_encode($dat); // work 

$data = array("0"=>"hello","1"=>"180.00 10µH"); 
echo json_encode($data); // blank response .. 

我搜索GitHub的PHP页面上json_enocde功能,但其所有的C,

所以任何想法如何修补这个功能

+0

哦.....你是对的。 –

+0

尝试'JSON_ERROR_CTRL_CHAR'选项' –

+1

试试这个:http://stackoverflow.com/questions/6606713/json-encode-non-utf-8-strings – barudo

回答

2

使用下面的代码:

function utf8_converter($array) { 
    array_walk_recursive($array, function(&$item, $key) { 
     if (!mb_detect_encoding($item, 'utf-8', true)) { 
      $item = utf8_encode($item); 
     } 
    }); 

    return $array; 
} 

$data = array("0"=>"hello","1"=>"180.00 10µH"); 
$data = utf8_converter($data); 
echo json_encode($data, JSON_PARTIAL_OUTPUT_ON_ERROR); 
+0

您的代码输出:'[“hello”,“180.00 10 \ u00b5H”]'。注意将'μ'转换为相应的特殊字符('\ u00b5')。 –

+0

@BhavikShah是的,没错。它会做到这一点。但是,无论何时使用json_decode将其转换回来,它都会回到它的原始形式。所以不要担心。 – KinjalMistry

+0

我得到错误utf8_encode()期望参数1是字符串,行中给出的数组# – user889030

0

试试这个:

$dat = array("0"=>"hello","1"=>"world"); 
echo json_encode($dat); // work 

$data = array("0"=>"hello","1"=>"180.00 10µH"); 
echo json_encode($data, JSON_UNESCAPED_UNICODE); 

例子:https://ideone.com/cYDf8Y

+0

得到空白响应,也许是因为我最后的大数组是多维的 – user889030