2009-09-08 25 views
9

json_encode() no funcionará para mí cuando estoy usando AAO. ¿Por qué? ¿Y cómo puedo hacer que funcione?Como llegar json_encode() para trabajar con la norma ISO-8859-1 (AAO)

El php:

echo json_encode($arr); 

El javascript:

var theResponse = JSON.parse(xmlHttp.responseText); 

Cuando alert() la respuesta, y la respuesta contiene una, a u o, la respuesta es = NULL

favor , que me ayude ...

+0

¿Qué resultados obtiene?¿Qué biblioteca JSON estás usando? –

+0

La salida es 'NULL' si contiene å, ä o ö. La biblioteca JSON es http://www.JSON.org/json2.js – Johan

+3

¿Qué versión de PHP está usando? Creo que las primeras versiones de 'json_encode()' solo manejaban las cadenas UTF-8 correctamente. Pruebe 'utf8_encode' -ing la cadena antes de codificar y vea si eso funciona. –

Respuesta

7

Como mencionó Greg, tuve que codificar åäö en UTF-8. Pero no usé iconv o mbstring. Cuando utf8_encode() todos los valores antes de poner los valores a la array el problema se solucionó.

+1

Me enfrenta un problema similar, donde tengo una matriz asociativa que necesita ser codificada. He intentado 'array_walk_recursive()' con 'if (is_string ($ input)) {return utf_encode ($ input); } else {return $ input} 'para la devolución de llamada, pero parece que no funcionó. ¿Algunas ideas? – Anticom

+0

@Anticom mi solución a continuación lo resuelve. –

0

Utilizando el método estándar cuando la lectura de MySQL:

$resultArray = array(); 
while($obj = MySQL_fetch_object($res)) { 
$resultArray[] = $obj; 
} 
$result = json_encode($resultArray); 

La codificación se puede hacer utilizando la siguiente:

$resultArray = array(); 
while($obj = MySQL_fetch_object($res)) { 
foreach($obj as $key => $value) { 
    if (!is_null($value)) { 
    $obj->$key = utf8_encode($value); 
    } 
} 
$resultArray[] = $obj; 
} 
$result = json_encode($resultArray); 

El if is_null tiene que ser incluido para que los campos nulos (por ejemplo, DateTime campos) permanecen nulos en la salida.

2

¡JSON define cadenas como Unicode!

JSON Definition

Usted tiene que codificar ISO que a UTF-8

0

El $data (en mi caso) es una matriz con valores de texto como ISO-8859-1. El truco a continuación prepara $data para ser utilizado con json_encode.

function toUtf8(&$v, $k) { 
    $v = utf8_encode($v); 
} 
array_walk_recursive($data, 'toUtf8'); 
4

Esta función arrojará el tipo de datos correcto para la salida JSON y utf8_encode las cadenas.

/* Change data-type from string to integar or float if required. 
    * If string detected then utf8_encode() it. */ 
    function cast_data_types ($value) { 
     if (is_array($value)) { 
     $value = array_map('cast_data_types',$value); 
     return $value; 
     } 
     if (is_numeric($value)) { 
     if(strpos('.', $value)===false) return (float)$value; 
     return (int) $value; 
     } 
     return utf8_encode((string)$value); 
    } 

json_encode (cast_data_types($data)); 
+0

Funcionó en mi caso. Gracias. – plocks

0

vieja pregunta, pero pensé que podría poner esto aquí por si alguien necesita registrar datos utilizando json_encode pero mantener los datos intactos, intacta para una inspección posterior.

Puede codificar los datos en bruto utilizando base64_encode, luego funcionará con json_encode. Más tarde, después de ejecutar json_decode, puede decodificar la cadena con base64_decode, obtendrá los datos originales sin modificaciones.

Cuestiones relacionadas