Comment puis-je enregistrer une chaîne codée json avec des caractères internationaux dans la base de données, puis analyser la chaîne codée dans le navigateur?
<?php
$string = "très agréable";
// to the database
$j_encoded = json_encode(utf8_encode($string));
// get from Database
$j_decoded = json_decode($j_encoded);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<?= $j_decoded ?>
</html>
Il s'agit d'un problème d'encodage. Il semble qu'à un moment donné, les données soient représentées comme ISO-8859-1.
Chaque partie de votre processus doit être encodée en UTF-8.
La connexion à la base de données
Les tables de base de données
Votre PHP (si vous utilisez des caractères spéciaux à l'intérieur de ce fichier comme indiqué dans votre exemple ci-dessus)
Le content-type
en-têtes que vous générez
json utf8 encode et décode:
json_encode($data, JSON_UNESCAPED_UNICODE)
json_decode($json, false, 512, JSON_UNESCAPED_UNICODE)
force utf8 pourrait aussi être utile: http://Pastebin.com/2XKqYU49
header('Content-Type: application/json; charset=utf-8');
Si votre fichier source est déjà utf8, supprimez les fonctions utf8_ *. php5 stocke des chaînes sous forme de tableau d'octets.
vous devez ajouter une balise meta pour l'encodage dans le html ET vous devez ajouter un en-tête http qui définit le transferencoding sur utf-8.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
et en php
<?php
header('Content-Type: text/html; charset=utf-8');
Essayez d'envoyer l'en-tête de jeu de caractères UTF-8:
<?php header ('Content-type: text/html; charset=utf-8'); ?>
Et la méta HTML:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
$j_decoded = utf8_decode(json_decode($j_encoded));
[~ # ~] éditez [~ # ~] ou pour être plus correct $j_encoded = json_encode($j_encoded);
$j_decoded = json_decode($j_encoded);
pas besoin d'en/décodage utf8<meta charset="utf-8" />
J'ai eu le même problème. Cela peut différer selon la façon dont vous mettez les données dans la base de données, mais essayez ce qui a fonctionné pour moi:
$str = json_encode($data);
$str = addslashes($str);
Faites-le avant d'enregistrer les données dans db.
si vous obtenez une erreur "Caractère inattendu", vous devez vérifier s'il existe une nomenclature (marqueur d'ordre d'octets enregistré dans votre json utf-8. Vous pouvez supprimer le premier caractère ou l'enregistrer sans nomenclature).
Pour moi, les deux méthodes
<?php
header('Content-Type: text/html; charset=utf-8');
echo json_encode($YourData, \JSON_UNESCAPED_UNICODE);
Travaille pour moi :)
function jsonEncodeArray( $array ){
array_walk_recursive( $array, function(&$item) {
$item = utf8_encode( $item );
});
return json_encode( $array );
}