destroyedlolo Posté 20 Mars 2013 Partager 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 ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Message populaire. BlackPage Posté 20 Mars 2013 Message populaire. Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
destroyedlolo Posté 20 Mars 2013 Auteur Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Message populaire. SStephane Posté 21 Mars 2013 Message populaire. Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
destroyedlolo Posté 21 Mars 2013 Auteur Partager 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). Lien vers le commentaire Partager sur d’autres sites More sharing options...
SStephane Posté 22 Mars 2013 Partager 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 ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant