Les éléments d'un tableau contenant des caractères spéciaux sont convertis en chaînes vides lors de l'encodage du tableau avec json_encode:
$arr = array ( "funds" => "ComStage STOXX®Europe 600 Techn NR ETF", "time"=>....);
$json = json_encode($arr);
Après l’encodage JSON de l’élément [fonds] est nul. Cela se produit uniquement avec des caractères spéciaux (droits d'auteur, marque de commerce, etc.) tels que ceux de "ComStage STOXX®Europe 600 Techn NR ETF".
Aucune suggestion?
Merci
UPDATE: C'est ce qui a résolu le problème avant de renseigner le tableau (tous les noms sont extraits de la base de données):
$mysqli->query("SET NAMES 'utf8'");
Votre entrée doit être codée au format UTF-8 ou ISO-8859-1.
http://www.php.net/manual/en/function.json-encode.php
Parce que si vous essayez de convertir un tableau de caractères non-utf8, vous aurez 0 comme valeur de retour.
Depuis 5.5.0 La valeur renvoyée en cas d'échec est passée de chaîne nulle à FALSE.
Le manuel de json_encode spécifie ceci:
Toutes les données de chaîne doivent être codées UTF-8.
Donc, essayez array_map
Ping utf8_encode()
dans votre tableau avant de l'encoder:
$arr = array_map('utf8_encode', $arr);
$json = json_encode($arr);
// {"funds":"ComStage STOXX\u00c2\u00aeEurope 600 Techn NR ETF"}
Pour référence, regardez les différences entre les trois exemples de ce violon . Le premier n'utilise pas l'encodage de caractères, le second utilise htmlentities
et le troisième utilise utf8_encode
- ils renvoient tous des résultats différents.
Pour des raisons de cohérence, vous devez utiliser utf8_encode()
.
Docs
Pour moi, ça marche comme ça:
# Creating the ARRAY from Result.
$array=array();
while($row = $result->fetch_array(MYSQL_ASSOC))
{
# Converting each column to UTF8
$row = array_map('utf8_encode', $row);
array_Push($array,$row);
}
json_encode($array);
vous devriez utiliser ce code:
$json = json_encode(array_map('utf8_encode', $arr))
la fonction array_map convertit les caractères spéciaux en standard UTF8
Utilisez la fonction ci-dessous.
function utf8_converter($array)
{
array_walk_recursive($array, function (&$item, $key) {
if (!mb_detect_encoding($item, 'utf-8', true)) {
$item = utf8_encode($item);
}
});
return $array;
}