2012-03-21 9 views
3
JSON_UNESCAPED_UNICODE

Depuis que je ne peux pas utiliser JSON_UNESCAPED_UNICODE parce que mon php est < 5.4, j'ai essayé quelques remplacements de json_encode() manual page:encode JSON et remplacement pour

$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.'"'); 

Et le résultat est:

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

Pourquoi le dernier article est un tel gâchis?

J'ai essayé

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

... mais encore du travail dosent.

+5

Le dernier élément du tableau que vous avez envoyé: ' « id »=> 26627', mais le dernier élément de l'impression est '" id ":" 26625 "', donc il semble qu'il y ait 2 tableaux différents ... L'impression 1-à-1 est-elle exacte à ce que vous essayez de faire? –

+0

Le fichier json produit sans 'JSON_UNESCAPED_UNICODE' est parfaitement valide. Pourquoi s'embêter à essayer de ranger? – TRiG

+0

J'ai couru votre code sans rien supplémentaire, et cela a très bien fonctionné! –

Répondre

0

Si votre sur une version de PHP avant 5.4, cela pourrait aider:

<?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 
     } 
    } 
} 
?>