par
stomper98 » 07 sept. 2012, 11:59
Bonjour,
Je rencontre un problème pour décoder une trame JSON via PHP.
J'ai un fichier texte json.txt contenant la trame en question que je décode via la fonction PHP json_decode, malheureusement je reçois toujours l'erreur null, à priori liée à un problème de syntaxe du fichier.
J'ai pourtant appliquer str_replace pour les problèmes de slashes, j'ai également converti le fichier en UTF8.
Voici le code que j'utilise :
// Ouverture du fichier en lecture seule
$fd = fopen("json.txt", 'r');
//Récupère le contenu du fichier et le place dans une chaine de caractères
$json = fread($fd, filesize("json.txt"));
//Encodage du fichier en UTF8
setlocale(LC_ALL, 'fr_FR.utf8'); //selon la configuration du serveur cela peut être : fr_FR
mb_detect_order(array('UTF-8', 'ISO-8859-1', 'ISO-8859-15', 'Windows-1252')); //l'extention mb_string est installée par defaut sur php5
function toUTF8($json){
$from = mb_detect_encoding($json);
if ($from != 'UTF-8') {
$json = mb_convert_encoding($json, 'UTF-8', $from);
}
return $json;
}
//$encoding = mb_detect_encoding($json);
//echo $encoding;
$json = str_replace(array('\\'), array(''), $json);
//echo $json;
//affiche le résultat
var_dump(json_decode($json));
var_dump(json_decode($json, true));
//Indique l'erreur rencontrée
$json_errors = array(
JSON_ERROR_SYNTAX => 'Syntax error',
JSON_ERROR_NONE => 'No error has occurred',
JSON_ERROR_DEPTH => 'The maximum stack depth has been exceeded',
JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded',
);
echo 'Last error : ', $json_errors[json_last_error()], PHP_EOL, PHP_EOL;
Chose étonnante si je fais un "echo $json;" et que je colle le résultat sur le site
http://jsonlint.com/ on m'indique que le JSON est valide. Et si je copie le JSON du site et le colle dans le json.txt là ca fonctionne.
Du coup je ne sais plus trop quoi penser.
Bonjour,
Je rencontre un problème pour décoder une trame JSON via PHP.
J'ai un fichier texte json.txt contenant la trame en question que je décode via la fonction PHP json_decode, malheureusement je reçois toujours l'erreur null, à priori liée à un problème de syntaxe du fichier.
J'ai pourtant appliquer str_replace pour les problèmes de slashes, j'ai également converti le fichier en UTF8.
Voici le code que j'utilise :
[php]
// Ouverture du fichier en lecture seule
$fd = fopen("json.txt", 'r');
//Récupère le contenu du fichier et le place dans une chaine de caractères
$json = fread($fd, filesize("json.txt"));
//Encodage du fichier en UTF8
setlocale(LC_ALL, 'fr_FR.utf8'); //selon la configuration du serveur cela peut être : fr_FR
mb_detect_order(array('UTF-8', 'ISO-8859-1', 'ISO-8859-15', 'Windows-1252')); //l'extention mb_string est installée par defaut sur php5
function toUTF8($json){
$from = mb_detect_encoding($json);
if ($from != 'UTF-8') {
$json = mb_convert_encoding($json, 'UTF-8', $from);
}
return $json;
}
//$encoding = mb_detect_encoding($json);
//echo $encoding;
$json = str_replace(array('\\'), array(''), $json);
//echo $json;
//affiche le résultat
var_dump(json_decode($json));
var_dump(json_decode($json, true));
//Indique l'erreur rencontrée
$json_errors = array(
JSON_ERROR_SYNTAX => 'Syntax error',
JSON_ERROR_NONE => 'No error has occurred',
JSON_ERROR_DEPTH => 'The maximum stack depth has been exceeded',
JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded',
);
echo 'Last error : ', $json_errors[json_last_error()], PHP_EOL, PHP_EOL;
[/php]
Chose étonnante si je fais un "echo $json;" et que je colle le résultat sur le site http://jsonlint.com/ on m'indique que le JSON est valide. Et si je copie le JSON du site et le colle dans le json.txt là ca fonctionne. :roll:
Du coup je ne sais plus trop quoi penser.