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

Résolu
OConell Messages postés 139 Date d'inscription   Statut Membre Dernière intervention   -  
SebRomeo Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   279
 
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   Statut Membre Dernière intervention   3
 
Faux : pour ne pas échapper les caractères en unicode utilisez :

json_encode($comp, JSON_UNESCAPED_UNICODE)

depuis PHP 5.4
1