Question

Je travaille sur un projet en PHP (5.3.1) où je dois envoyer une chaîne JSON à un webservice (en python), mais le résultat que je reçois de json_encode ne passe pas comme JSON valide (i » m en utilisant JSLint pour vérifier la validité).

Je dois ajouter que la structure que je suis en train de Cypher est assez grand (13K encodée), et se compose en partie des données UTF8, et alors que json_encode ne gère, je reçois des espaces dans des endroits étranges dans le résultat. Par exemple, je pourrais { « bonjour »: tru e} ou { « enfer o »: true}. Qui se traduit par une erreur du webservice depuis le JSON est invalide (ou de données, comme dans le second exemple)

J'ai aussi essayé d'utiliser le Zend Framework pour l'encodage JSON, mais cela n'a pas beaucoup différent.

Y at-il un problème connu avec JSON en PHP? Quelqu'un at-il rencontre que le comportement et a trouvé une solution?

Était-ce utile?

La solution 3

Je menais des e-mails générés automatiquement l'autre jour et a remarqué le même comportement bizarre (espaces ont été insérés dans le corps e-mail), donc j'ai commencé à vérifier le poste de courrier électronique et a trouvé le coupable:

De la RFC2821 SMTP:

  

La longueur totale maximale d'un texte   ligne y compris le est de 1000   caractères (sans compter le leader   dot en double pour la transparence).

Mon corps de l'email était en effet dans une ligne, rompant ainsi avec résolu le problème des espaces de \ n.

Autres conseils

Vous déclarez que « la structure que je suis en train de coder ... consiste en partie des données UTF8. » Cela implique qu'il est également en partie des données non-UTF8. json_encode doc a un commentaire au fond, que

  

json_encode () attend des chaînes à coder pour être au format UTF8, tandis que les chaînes par défaut PHP sont codés ISO-8859-1.   Cela signifie que

     

json_encode (array ( 'UA'));

     

produira une représentation JSON d'une chaîne vide, alors que

     

json_encode (array (utf8_encode ( 'UA')));

     

fonctionne.

sont les segments défaillants du JSON en raison de l'entrée non-UTF8?

Pour les clés de l'objet ne peuvent pas contenir sûr des espaces ou des caractères non unicode, les variables non cotées ne peut être que booléen, entier, flottant, objet et valeur de tableau, les chaînes doivent toujours être entre guillemets.

De plus, je vous recommande d'ajouter en-tête correcte avant votre sortie JSON.

if(!headers_sent())
   header('Content-Type: application/json; charset=utf-8', true,200);

Pouvez-vous aussi votre tableau poster ou objet que vous passer à json_encode?

Après avoir gratté ma tête pendant près d'un jour, je suis venu à la conclusion que le problème n'a pas été dans la fonction json_encode. Il était avec ma fonction de poste.

En fait, le json_encode préparait les données à envoyer à un autre service. Avant aujourd'hui, je l'ai utilisé stream_context_create et fopen pour publier des données au service externe, mais maintenant je l'utilise fsockopen et fputs et il semble fonctionner.

Bien que je ne suis pas sûr quant à la nature du problème, je suis content que ça fonctionne maintenant:)

BTW: Après ce processus, je me mailleurs les entrées et les sorties (à la fois en JSON) et voilà comment je voyais qu'il y avait un problème en premier lieu. Ce problème persiste mais je suppose que c'est lié à l'encodage du courrier ou quelque chose de ce genre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top