utf8_encode utf8 json_unescaped_unicode json_encode ejemplo array acentos php mysql character-encoding json

utf8 - return json_encode php



¿Cómo json_encode array con acentos franceses? (6)

Tengo un elemento de matriz con acento francés ([WIPDescription] => Recette Soupe à lOignon Sans Boeuf US). Los datos se están extrayendo correctamente de la base de datos (mysql).

Sin embargo, cuando trato de codificar esto como json usando el php integrado en json_encode produce un valor nulo de json (servidor OS X: php 5.3.4, json 1.2.1 habilitado).

En un servidor Linux, la descripción se corta después del primer carácter de acento.

Probé todas las opciones de json_encode sin éxito. ¿Alguna sugerencia?

Gracias.


Encontré que esta es la forma más fácil de lidiar con eso

echo json_encode($array, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

JSON_PRETTY_PRINT - hace que sea legible
JSON_UNESCAPED_UNICODE - codifica los caracteres correctamente
JSON_UNESCAPED_SLASHES - elimina la barra de escape ''/'
Observe también que estas opciones están separadas por una tubería ''|''


Otra solución sería usar htmlentities o utf8_encode antes de usar json_encode para pasar el carácter codificado.

Me gusta esto:

$array = array(''myvalue'' => utf8_encode(''ééàà'')); return json_encode($array);

O usando htmlentities :

$array = array(''myvalue'' => htmlentities(''ééàà'')); return json_encode($array);


Por los documentos PHP

Esta función solo funciona con datos codificados en UTF-8.


json_encode solo quiere utf-8 . Dependiendo de su conjunto de caracteres, puede usar iconv o utf8_encode antes de llamar a json_encode en su variable. Probablemente con array_walk_recursive .

Tal como se solicitó, una forma no terminada de alterar una matriz, con los supuestos de que (1) no contiene objetos, y (2) las claves de la matriz están en límites ASCII / inferiores, por lo que pueden dejarse como están:

$current_charset = ''ISO-8859-15'';//or what it is now array_walk_recursive($array,function(&$value) use ($current_charset){ $value = iconv(''UTF-8//TRANSLIT'',$current_charset,$value); });


$json = utf8_encode($string); $json = json_decode($json);


<? $sql=mysql_query("SELECT * FROM TABLE..."); while($row=mysql_fetch_array($sql)) { $output[]=array_map("utf8_encode", $row); } print(json_encode($output)); mysql_close(); ?>