Pb json_encode (php) et caractères accentués

Résolu/Fermé
OConell Messages postés 139 Date d'inscription samedi 1 novembre 2008 Statut Membre Dernière intervention 13 octobre 2010 - 24 août 2010 à 17:12
SebRomeo Messages postés 2 Date d'inscription mardi 21 juin 2016 Statut Membre Dernière intervention 21 juin 2016 - 21 juin 2016 à 16:45
Bonjour,

Je réalise une appli web qui communique avec une bdd. Tout ce que je fais depuis mon appli fonctionne, mais cette bdd et utilisé par une autre appli java.

Le problème vient de la récupération des données de la bdd qui ne sont créer au chargement de l'appli java (par copie d'une table d'initialisation dans la table courante).

Je récupère toutes les données en php (utilisation de PDO sur base myssql) et j'utilise la fonction json_encode. C'est là que ça plante. tous les champs où il y a un caractères avec accents est remplacé par null.

SI vous avez des idées merci...

-------------------------------------------------------------------------------------
... // fichier connexion.php
try {
$bdd = new PDO("mysql:host=$hote;dbname=$nombd", $login, $mdp);
}catch (Exception $e){ die(''); }
...

//fichier php
<?php
header('Content-Type: text/html; charset=utf-8');
//header("Content-Type: text/plain"); //test
//header('content-type: text/html; '); // test
//header('content-type: text/html; charset=utf-8'); //test

require('connexion.php');
$rows = array();
try
{
$stmt = $bdd->prepare('Select usl_id, usl_nom, usl_type, usl_lati, usl_longi, usl_descri FROM usl');
$stmt->execute();

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

echo utf8_decode($rows[0]['usl_nom']); // -> oK
echo "\n <br/>";
echo utf8_decode(json_encode($rows)); // -> les champs avec char accentués = null
$stmt->closeCursor();
}
catch (Exception $e)
{
die("erreur");
}

?>
-------------------------------------------------------------------------------------

A voir également:

7 réponses

canfly Messages postés 14 Date d'inscription dimanche 31 mars 2013 Statut Membre Dernière intervention 1 avril 2013 279
1 avril 2013 à 00:32
La fonction json_encode de PHP ne travaille qu'en UTF-8, donc il faut que tout soit en UTF-8 : script PHP, variables de type "string" manipulées, mais aussi headers HTTP.
Cf ce tuto :
http://www.finalclap.com/faq/60-php-debug-json
4
SebRomeo Messages postés 2 Date d'inscription mardi 21 juin 2016 Statut Membre Dernière intervention 21 juin 2016 3
21 juin 2016 à 16:44
Faux : pour ne pas échapper les caractères en unicode utilisez :

json_encode($comp, JSON_UNESCAPED_UNICODE)

depuis PHP 5.4
1