PHP JSON encoder JSON décoder UTF-8
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 dé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>
8 réponses
C'est 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 La base
-
Votre fichier PHP (si vous utilisez des caractères spéciaux dans ce fichier comme indiqué dans votre exemple ci-dessus)
-
Les en-têtes
content-type
que vous affichez
JSON utf8 encoder et décoder:
json_encode($data, JSON_UNESCAPED_UNICODE)
json_decode($json, false, 512, JSON_UNESCAPED_UNICODE)
Force utf8 pourrait être utile aussi: 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 en tant que 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 du 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" />
-
utf8_decode
$j_decoded = utf8_decode(json_decode($j_encoded));
modifier ou, pour être plus exact$j_encoded = json_encode($j_encoded);
$j_decoded = json_decode($j_encoded);
pas besoin de salle de décodage/utf8 <meta charset="utf-8" />
Si vous obtenez une erreur "caractère inattendu", vous devriez vérifier s'il y a un marqueur D'ordre D'octets enregistré dans votre JSON utf-8. Vous pouvez supprimer le premier caractère ou enregistrer si sans nomenclature.
Travailler pour moi:)
function jsonEncodeArray( $array ){
array_walk_recursive( $array, function(&$item) {
$item = utf8_encode( $item );
});
return json_encode( $array );
}