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> 
23
demandé sur candlejack 2010-11-02 13:59:46

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

22
répondu Pekka 웃 2010-11-02 11:17:00

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

30
répondu Lukas 2018-02-27 06:34:41
  header('Content-Type: application/json; charset=utf-8');
26
répondu Ahmet Erkan ÇELİK 2013-12-23 19:45:08

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');
11
répondu Bernd Ott 2010-11-02 11:17:09

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" />
4
répondu Coquevas 2010-11-02 11:17:10
  1. 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
  2. <meta charset="utf-8" />
3
répondu teemitzitrone 2010-11-02 11:27:10

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.

0
répondu Blox 2016-10-09 04:17:45

Travailler pour moi:)

function jsonEncodeArray( $array ){
    array_walk_recursive( $array, function(&$item) { 
       $item = utf8_encode( $item ); 
    });
    return json_encode( $array );
}
0
répondu Douglas Comim 2017-07-26 19:54:08