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();
?>