bonjour à tous,
voilà je me sui trouver confronter à un classique du php avec la fonctione json_encode
lorsque je voulais encoder en JSON une chaine de caractére avec des accents, je me retouvé avec des choses bizares.
{"Time":1449474797000,"Lat":"[08:31:53","Lng":"113.90249","Status":"D\u00e9barquement","Speed":"0","Heading":"76","Altitude":"32","Distance":"6732.9506265181","FuelUsed":"12","Temps_restant":"00:00"}
ayant fait le tour de forum j'ai vue beaucoup de chose sans jamais réellement comprendre mais j'ai trouvé une fonction qui corrige le soucis, tout du moins à l'affichage (pas tester sur BD).
https://benjion.wordpress.com/2013/01/03/php-json_encode-et-probleme-avec-les-accents/
$monTableau = preg_replace("/\\\\u([a-f0-9]{4})/e", "iconv('UCS-4LE','UTF-8',pack('V', hexdec('U$1')))", json_encode($monTableau));
Mais j'ai peur de foutre en vrac des données
voici la config du systéme
<!DOCTYPE html>
<html lang="fr">
<head>
<title>mon site</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
la bd sur phpmyadmin (voir message log)
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
CREATE TABLE IF NOT EXISTS `tks2_blackbox` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pilotid` varchar(11) NOT NULL DEFAULT '0',
`flightnum` varchar(30) NOT NULL DEFAULT '0',
`aircraft` varchar(12) NOT NULL DEFAULT '',
`depicao` varchar(4) NOT NULL DEFAULT '',
`depapt` varchar(255) NOT NULL DEFAULT '',
`arricao` varchar(4) NOT NULL DEFAULT '',
`arrapt` text NOT NULL,
`messagelog` longtext NOT NULL,
`lastupdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`client` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `pilotid` (`pilotid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=75 ;
objet pdo
$pdo = new PDO($this->dbase_dns,$this->dbase_user , $this->dbase_pass,
array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
j'ai pas regardé l'encodage de mes fichiers php, mais normalement ils sont en en utf8 sans boom.
donc je si je prend le contenu de ma bd (colone message log) ,
sortie affichage phpmyadmin
*![Time UTC]2015-12-07 08:32:17![lat]22.32483![lng]114.19332![status]Embarquement![speed]0![heading]136![altitude]4![distance]6748.7700408981![fuelUsed]0![temps_restant]00:00*![Time UTC]2015-12-07 08:32:47![lat]22.32162![lng]114.19682![status]Décollage![speed]66![heading]135![altitude]54![distance]6748.9943373064![fuelUsed]0![temps_restant]102:15![log][08:31:53] ...
et que je l'encode en json, j'ai ceci
{"Time":1449473537000,"Lat":"22.32483","Lng":"114.19332","Status":"Embarquement","Speed":"0","Heading":"136","Altitude":"4","Distance":"6748.7700408981","FuelUsed":"0","Temps_restant":"00:00"}
{"Time":1449473567000,"Lat":"22.32162","Lng":"114.19682","Status":"D\u00e9collage","Speed":"66","Heading":"135","Altitude":"54","Distance":"6748.9943373064","FuelUsed":"0","Temps_restant":"102:15"}
{"Time":1449473597000,"Lat":"22.31311","Lng":"114.20559","Status":"En mission","Speed":"95","Heading":"141","Altitude":"404","Distance":"6749.5611016503","FuelUsed":"1","Temps_restant":"71:03"}
J'arrive donc à me poser 2 questions, enfin 3
-quelle étapes de mon coté aurai je pu louper
-es ce que la parade sité plus haut est valable et sur pour récrire ma bd en réencoder mes string explode en json
-aurai t'il laisser une fonction chez php boiteuse.
Pourriez vous éclairer ma bougie.
Merci d'avance
Flo
$array = array('nome'=>'Paição','cidade'=>'São Paulo');
$array = array_map('htmlentities',$array);
//encode
$json = html_entity_decode(json_encode($array));
//Output: {"nome":"Paição","cidade":"São Paulo"}
echo $json;
Ou ça ?
function utf8_encode_all($dat) // -- It returns $dat encoded to UTF8
{
if (is_string($dat)) return utf8_encode($dat);
if (!is_array($dat)) return $dat;
$ret = array();
foreach($dat as $i=>$d) $ret[$i] = utf8_encode_all($d);
return $ret;
}
/* ....... */
function utf8_decode_all($dat) // -- It returns $dat decoded from UTF8
{
if (is_string($dat)) return utf8_decode($dat);
if (!is_array($dat)) return $dat;
$ret = array();
foreach($dat as $i=>$d) $ret[$i] = utf8_decode_all($d);
return $ret;
}
Ou encore ça ?
$data = 'éáíúűóüöäÍÓ';
$json = json_encode( utf8_encode($data) );
// [..]
$data = utf8_decode( json_decode($json) );