destroyedlolo Posté 20 Mars 2013 Posté 20 Mars 2013 Bonjour, J'ai un problème avec json_decode() si un des champs du json contient un \n ... en fait certains carractères échapés fonctionnent comme \b d'autres non comme \n ou \\ ... Pourtant http://www.json.org/ m'indique que c'est une notation valide ... Exemple de code : $str = <<<FIN{ "memory":{ "swap_total":"1686788", "swap_free":"1686788", "memory_total":"1552556", "memory_free":"1300184" }, "smart":"/dev/sdc [sAT] Device: /dev/sdc [sAT], Failed SMART usage Attribute: 10 Spin_Retry_Count.\n"}FIN;$tst = json_decode($str, true);var_dump( $tst ); Sans le \n ca passe, sinon JSON_ERROR_SYNTAX ... J'utilise PHP 5.4.8 ... Quelqu'un aurait une idée ?
Message populaire. BlackPage Posté 20 Mars 2013 Message populaire. Posté 20 Mars 2013 Salut, Normalement côté JS tu fais : mavar = escape(Object.toJSON(var_a_encoder)); Et côté PHP : $mavar = rawurldecode($_POST["var_a_decoder)); Et ca devrait le faire. Bon courage ! 1
destroyedlolo Posté 20 Mars 2013 Auteur Posté 20 Mars 2013 (modifié) Salut et merci pour ta réponse. En l’occurrence, mon émetteur est en Lua : c'est pour faire des webservices. Par contre, j'ai vraiment l'impression que c'est un bug de PHP, car http://www.json.org/ indique "A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes. A character is represented as a single character string. A string is very much like a C or Java string." Et la sorte de BNF indique clairement que les escapes devraient passées ... Ce qui me fait aussi penser à un bug, c'est que certains escapes passent et d'autres non ... ps: bon, comme workaround, je transforme les "\n" en "\u000a" qui à l'aire de passer ... Modifié 20 Mars 2013 par destroyedlolo
Message populaire. SStephane Posté 21 Mars 2013 Message populaire. Posté 21 Mars 2013 Je pense (en fait j'en suis sur ) que ton problème vient du HEREDOC...ce n'est pas un bug. Avec NOWDOC, ca fonctionnera, je pense que tu comprendras pourquoi. 1
destroyedlolo Posté 21 Mars 2013 Auteur Posté 21 Mars 2013 Yep, bien vu ! Ben même si je l'avais entrée comme une chaine complète, j'aurai jamais penser mettre simple cote juste pour ça car je n'aurai pas pensé qu'il aurait été converti ... (en fait, je met toujours des simples cotes, car c'est plus rapide pour PHP, mais c'est un autre sujet).
SStephane Posté 22 Mars 2013 Posté 22 Mars 2013 nowdoc obéït certainement aux même lois en terme de rapidité (certainement pour évoquer un doute). Pour l'utilisation des simples quote, je suis la recommandation de zend : simple quote quand il n'y a pas de simple quote/variable dans ma string http://framework.zend.com/wiki/display/ZFDEV/PHP+Coding+Standard+%28draft%29#PHPCodingStandard%28draft%29-StringLiteralsContainingApostrophes (Je me permets de le préciser dans ton topic car tu abordes le sujet, et ne souhaiterais pas que la simple-quote se démocratise trop auprès de codeurs qui pourraient en devenir aficionados !) Aufwiedersehen !
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant