J'utilise json_encode ($ data) pour un tableau de données et un champ contient des caractères russes. J'ai utilisé mb_detect_encoding () pour afficher le codage correspondant à ce champ et le format UTF-8. Je pense que l'encodage JSON a échoué à cause de mauvais caractères comme "ра▒". J'ai essayé beaucoup de choses sur utf8_encode sur les données et cette erreur sera contournée, mais les données ne semblent plus correctes.
Que peut-on faire avec ce problème?
Le problème se produit s'il y a des caractères non-utf8 à l'intérieur même si la plupart d'entre eux sont des caractères utf8. Cela supprimera tous les caractères non-utf8 et cela fonctionne maintenant.
$data['name'] = mb_convert_encoding($data['name'], 'UTF-8', 'UTF-8');
Si vous avez un tableau multidimensionnel à encoder au format JSON, vous pouvez utiliser la fonction ci-dessous:
Si JSON_ERROR_UTF8 s'est produit:
$encoded = json_encode( utf8ize( $responseForJS ) );
La fonction ci-dessous est utilisée pour encoder les données d'un tableau de manière récursive
/* Use it for json_encode some corrupt UTF-8 chars
* useful for = malformed utf-8 characters possibly incorrectly encoded by json_encode
*/
function utf8ize( $mixed ) {
if (is_array($mixed)) {
foreach ($mixed as $key => $value) {
$mixed[$key] = utf8ize($value);
}
} elseif (is_string($mixed)) {
return mb_convert_encoding($mixed, "UTF-8", "UTF-8");
}
return $mixed;
}
Assurez-vous d’initier votre objet Pdo avec le jeu de caractères iso tel qu’utf8 . Cela devrait résoudre ce problème en évitant toute danse ré-utf8izing.
$pdo = new PDO("mysql:Host=localhost;dbname=mybase;charset=utf8", 'user', 'password');
vous venez d'ajouter dans votre connexion pdo charset = utf8
$pdo = new PDO("mysql:Host=localhost;dbname=mybase;charset=utf8", 'user', 'password');
j'espère que ceci vous aidera
Supprimez les entités html avant l'encodage JSON. IS a utilisé html_entity_decode () en php et le problème a été résolu,
$json = html_entity_decode($source);
$data = json_decode($json,true);