web-dev-qa-db-fra.com

fonction json_encode: caractères spéciaux

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'");
40
user2723490

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.

15
deW1

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

40
Robbie Averill

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);
6
sandolkakos

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

4
user3711086

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;
}
0
Lakin Mohapatra