Aller au contenu

json_decode et caractères speciaux


destroyedlolo

Sujets conseillés

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

Posté (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é par destroyedlolo
Lien vers le commentaire
Partager sur d’autres sites

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

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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...