Jump to content
Sign in to follow this  
destroyedlolo

json_decode et caractères speciaux

Rate this topic

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 ?

Share this post


Link to post
Share on other 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 !


  • Upvote 1

Share this post


Link to post
Share on other 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 ...


Edited by destroyedlolo

Share this post


Link to post
Share on other 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.


  • Upvote 1

Share this post


Link to post
Share on other 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).


Share this post


Link to post
Share on other 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 !


Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...