Aller au contenu
destroyedlolo

json_decode et caractères speciaux

Noter ce sujet :

Recommended Posts

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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 !


  • Vote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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.


  • Vote 1

Partager ce message


Lien à poster
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).


Partager ce message


Lien à poster
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 !


Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×