PHP: json_decode ne fonctionne pas
Cela ne pas travail:
$jsonDecode = json_decode($jsonData, TRUE);
Cependant, si je copie la chaîne de $jsonData
et de le mettre à l'intérieur de la décoder fonction manuellement ça fonctionne.
Ce œuvres:
$jsonDecode = json_decode('{"id":"0","bid":"918","url":"http:\/\/www.google.com","md5":"6361fbfbee69f444c394f3d2fa062f79","time":"2014-06-02 14:20:21"}', TRUE);
Je n'ai sortie $jsonData
copié et mis en comme ci-dessus dans le décodage de la fonction. Puis il a travaillé. Cependant, si j'ai mis $jsonData
directement dans le décodage de la fonction, il n'en a pas.
var_dump($jsonData)
montre:
string(144) "{"id":"0","bid":"918","url":"http:\/\/www.google.com","md5":"6361fbfbee69f444c394f3d2fa062f79","time":"2014-06-02 14:20:21"}"
La $jsonData
vient d'un chiffrés $_GET
variable. Pour 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);
source d'informationauteur yoshi | 2014-06-02
Vous devez vous connecter pour publier un commentaire.
Très probablement, vous devez enlever le rembourrage de vos données décryptées. Il y a 124 caractères visibles dans votre chaîne mais
var_dump
rapports 144. Ce qui signifie 20 caractères de remplissage doit être supprimé (une série de "\0" octets à la fin de votre chaîne de caractères).Probablement que c'est 4 "\0" octets à la fin d'un bloc + vide 16 octets du bloc (pour marquer la fin des données).
Comment êtes-vous en train de décryptage/le cryptage de votre chaîne?
Modifier:
Vous avez besoin de l'ajouter à la garniture de zéro octets à la fin de la chaîne:
quelques temps, il y est question des entités html, par exemple \" cela sera comme ceci \"de sorte que vous devez avoir besoin de parser le html entités de texte réel, que vous pouvez faire à l'aide de
html_entity_decode()
méthode de php.
À en juger par les autres commentaires, que vous pourriez utiliser,
$jsonDecode = json_decode(trim($jsonData), TRUE);
Assurez-vous de définir l'en-tête de JSON
Il est intéressant de noter mcrypt_decrypt semblent ajouter des caractères de contrôle autres que \0 à la fin du texte résultant en raison de son rembourrage de l'algorithme. Donc au lieu de
rtrim($jsonData, "\0")
il est recommandé d'utiliser
sur le résultat de $données de mcrypt_decrypt. la fonction json_decode ne fonctionnera que si tous fuite des caractères de contrôle sont supprimés. Pl reportez-vous à la remarque de Peter Bailey à http://php.net/manual/en/function.mdecrypt-generic.php .
str_replace("\t"" ", str_replace("\n"" ", $string))
parce que la fonction json_decode ne fonctionne pas avec les caractères spéciaux. Et pas d'erreur sera affiché. Assurez-vous de supprimer l'onglet espaces et de nouvelles lignes.
Selon la source que vous obtenez vos données, vous devez également:
stripslashes(html_entity_decode($string))
Fonctionne pour moi:
de sortie:
J'ai eu des problème que
json_decode
ne fonctionne pas, la solution était de changer la chaîne de codage utf-8. Ce qui est important dans le cas où vous avez des caractères non-latins.