2012-03-21 32 views
3

因为我不能使用JSON_UNESCAPED_UNICODE,因为我的PHP是< 5.4,我已经尝试了一些替代从json_encode() manual pageJSON编码和替代JSON_UNESCAPED_UNICODE

$final = array (
    0 => array (
    'id' => 26629, 
    'content' => 'преди 5 сек' 
), 
    1 => array (
    'id' => 26628, 
    'content' => 'преди 5 сек' 
), 
    2 => array (
    'id' => 26627, 
    'content' => 'преди 5 сек' 
) 
); 

$myDirtyString = json_encode($final); 
$myDirtyString = str_replace("\/","/",$myDirtyString); 
$myDirtyString = str_replace('"','\\"',$myDirtyString); 

echo $myCleanedString = json_decode('"'.$myDirtyString.'"'); 

,其结果是:

[ 
    {"id":"26629","timestamp":"преди 5 сек"}, 
    {"id":"26628","timestamp":"преди 5 сек"}, 
    {"id":"26625","timestamp":"¿Ñеди 5 Ñек"} 
] 

为什么最后一项是如此混乱?

我试图

header('Content-Type: application/json; charset=utf-8'); 

...但仍然dosent工作。

+5

在您发布的数组中的最后一项是:'“身份证” => 26627',但在打印输出中的最后一个项目是'“id”:“26625”',所以它好像有两个不同的阵列......打印输出与您正在尝试做什么完全一样吗? – 2012-03-21 10:35:26

+0

没有'JSON_UNESCAPED_UNICODE'生成的json是完全有效的。为什么要打扰整理呢? – TRiG 2012-10-08 17:31:24

+0

我跑了你的代码没有任何额外的,它工作得很好! – 2014-06-27 19:56:22

回答

0

如果您在5.4之前版本的PHP,这可能帮助:

<?php 
if (!function_exists('json_encode')) { 
    function json_encode($data) { 
     switch ($type = gettype($data)) { 
      case 'NULL': 
       return 'null'; 
      case 'boolean': 
       return ($data ? 'true' : 'false'); 
      case 'integer': 
      case 'double': 
      case 'float': 
       return $data; 
      case 'string': 
       return '"' . addslashes($data) . '"'; 
      case 'object': 
       $data = get_object_vars($data); 
      case 'array': 
       $output_index_count = 0; 
       $output_indexed = array(); 
       $output_associative = array(); 
       foreach ($data as $key => $value) { 
        $output_indexed[] = json_encode($value); 
        $output_associative[] = json_encode($key) . ':' . json_encode($value); 
        if ($output_index_count !== NULL && $output_index_count++ !== $key) { 
         $output_index_count = NULL; 
        } 
       } 
       if ($output_index_count !== NULL) { 
        return '[' . implode(',', $output_indexed) . ']'; 
       } else { 
        return '{' . implode(',', $output_associative) . '}'; 
       } 
      default: 
       return ''; // Not supported 
     } 
    } 
} 
?>