Ceci ne pas fonctionne:
$jsonDecode = json_decode($jsonData, TRUE);
Cependant, si je copie la chaîne à partir de $jsonData
et que je la mets manuellement dans la fonction de décodage, cela fonctionne.
Ce fonctionne :
$jsonDecode = json_decode('{"id":"0","bid":"918","url":"http:\/\/www.google.com","md5":"6361fbfbee69f444c394f3d2fa062f79","time":"2014-06-02 14:20:21"}', TRUE);
J'ai sorti $jsonData
copié et mis comme ci-dessus dans la fonction de décodage. Ensuite cela a fonctionné. Cependant, si je mets $jsonData
directement dans la fonction de décodage, ce n'est pas le cas.
var_dump($jsonData)
montre:
string(144) "{"id":"0","bid":"918","url":"http:\/\/www.google.com","md5":"6361fbfbee69f444c394f3d2fa062f79","time":"2014-06-02 14:20:21"}"
Le $jsonData
provient d'une variable $_GET
cryptée. Pour le chiffrer, j'utilise ceci:
$key = "SOME KEY";
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_Rand);
$enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $data, MCRYPT_MODE_ECB, $iv);
$iv = rawurlencode(base64_encode($iv));
$enc = rawurlencode(base64_encode($enc));
//To Decrypt
$iv = base64_decode(rawurldecode($_GET['i']));
$enc = base64_decode(rawurldecode($_GET['e']));
$data = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB, $iv);
Très probablement, vous devez retirer le rembourrage de vos données déchiffrées. Votre chaîne contient 124 caractères visibles, mais var_dump
indique 144. Cela signifie que 20 caractères de remplissage doivent être supprimés (une série d'octets "\ 0" à la fin de votre chaîne).
Cela correspond probablement à 4 "\ 0" octets à la fin d'un bloc + un bloc vide de 16 octets (pour marquer la fin des données).
Comment décryptez-vous/chiffrez-vous actuellement votre chaîne?
Modifier :
Vous devez ajouter ceci pour couper les octets nuls à la fin de la chaîne:
$jsonData = rtrim($jsonData, "\0");
il y a quelque temps des entités HTML, par exemple\"cela va ressembler à ceci\& quot , vous devez donc analyser les entités html en texte réel, ce que vous pouvez utiliser avec. html_entity_decode () méthode de php.
$jsonData = stripslashes(html_entity_decode($jsonData));
$k=json_decode($jsonData,true);
print_r($k);
À en juger par les autres commentaires, vous pourriez utiliser,
$ jsonDecode = json_decode (trim ($ jsonData), TRUE);
Assurez-vous de définir l'en-tête sur JSON
header('Content-type: application/json;');
J'ai eu le problème que json_decode
ne fonctionnait pas, la solution était de changer l'encodage de chaîne en utf-8. Ceci est important si vous avez des caractères non latins.
De manière intéressante, mcrypt_decrypt semble ajouter des caractères de contrôle autres que\0 à la fin du texte résultant en raison de son algorithme de remplissage. Par conséquent, au lieu de rtrim($jsonData, "\0")
it, il est recommandé d’utiliser
preg_replace( "/\p{Cc}*$/u", "", $data)
sur le résultat $ data de mcrypt_decrypt. json_decode fonctionnera si tous les caractères de contrôle de fin sont supprimés. Veuillez vous reporter au commentaire de Peter Bailey à http://php.net/manual/en/function.mdecrypt-generic.php .
En passant sur php 7.1, j'ai rencontré le numéro d'erreur 4 json_decode (erreur json syntex). Aucune des solutions ci-dessus sur cette page n'a fonctionné pour moi.
Après avoir fait quelques recherches supplémentaires, j’ai trouvé la solution sur https://stackoverflow.com/a/15423899/1545384 et que cela fonctionne pour moi.
//Remove UTF8 Bom
function remove_utf8_bom($text)
{
$bom = pack('H*','EFBBBF');
$text = preg_replace("/^$bom/", '', $text);
return $text;
}
str_replace ( "\ t" , "", str_replace ( "\ n" , "", chaîne $))
parce que json_decode ne fonctionne pas avec des caractères spéciaux. Et aucune erreur ne sera affichée. Assurez-vous de bien supprimer les espaces de tabulation et les nouvelles lignes . Selon la source de vos données, vous aurez peut-être également besoin de: stripslashes (html_entity_decode ($ string))
Travaille pour moi:
<?php
$sql = <<<EOT
SELECT *
FROM `students`;
EOT;
$string = '{ "query" : "' . str_replace("\t", " ", str_replace("\n", " ", $sql)).'" }';
print_r(json_decode($string));
?>
sortie:
stdClass Object
(
[query] => SELECT * FROM `students`;
)