web-dev-qa-db-fra.com

PHP json_encode json_decode 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 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> 
23
FFish

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

23
Pekka 웃

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

39
Lukas
  header('Content-Type: application/json; charset=utf-8');
28
Ahmet Erkan ÇELİK

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');
11
Bernd Ott

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" />
5
Coquevas
  1. tf8_decode$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
  2. <meta charset="utf-8" />
4
teemitzitrone

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.

0
Michał Moskal

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).

0
Blox

Pour moi, les deux méthodes

<?php

header('Content-Type: text/html; charset=utf-8');

echo json_encode($YourData, \JSON_UNESCAPED_UNICODE);
0
EVGENIY DANILOV

Travaille pour moi :)

function jsonEncodeArray( $array ){
    array_walk_recursive( $array, function(&$item) { 
       $item = utf8_encode( $item ); 
    });
    return json_encode( $array );
}
0
Douglas Comim