40 votes

Comment insérer des guillemets dans une chaîne d'une réponse ajax JSON à partir de php?

- Je recevoir une réponse JSON dans une requête Ajax à partir du serveur. De cette manière, il fonctionne:

{ "a" : "1", "b" : "bonjour kitty"" }

Mais je n'ai pas réussi à mettre des guillemets autour de kitty.

Quand je convertir "à \x22 dans l'Ajax de réponse, il est toujours interprété comme" en JavaScript et je ne peut pas analyser le JSON.

Dois-je aussi échapper à l' \ et ne pas encoder plus tard (ce qui serait possible)?

Comment faire cela?

Edit: je ne sais pas si je m'exprime bien: je veux cette chaîne à l'intérieur de "b" après l'analyse:

bonjour "kitty"

Si nécessaire, je pourrais ajouter une étape supplémentaire après le parser pour le convertir en "b", mais je suppose qu'il n'est pas nécessaire, il y a un moyen plus élégant si cela se fait automatiquement?

Edit2: L'ajax page est généré par php. J'ai essayé plusieurs choses à créer de la valeur de b, tous les résultats en JSON parse error sur la page:

  $b = 'hello "kitty"';      

  // no 1:
  //$b = str_replace('"',"\x22",$b);

  // or no 2:
  // $b = addslashes($b);  

  // or no 3: 
  $b = str_replace('"','\"',$b);

  echo '{ "a" : "1", "b" : "' . $b . '"}';

Edit3: Cette solution fonctionne enfin:

$b = 'hello "kitty"';      
$b = str_replace('"','\\"',$b); 
echo '{ "a" : "1", "b" : "' . $b . '"}';

56voto

Max Shawabkeh Points 19030

Il suffit d’échapper avec une barre oblique inverse:

 > JSON.stringify({"a": 5, "b": 'a "kitty" mighty odd'})
{"a":5,"b":"a \"kitty\" mighty odd"}
> JSON.parse('{"a":5,"b":"a \\"kitty\\" mighty odd"}')
Object
  a: 5
  b: a "kitty" mighty odd
  __proto__: Object
 

Les analyseurs JSON reconnaissent \" intérieur des chaînes entre guillemets doubles comme des guillemets doubles. Notez que dans le deuxième exemple, la double barre oblique inversée est nécessaire car il existe une passe d'analyse Javascript, puis une autre passe d'analyse JSON.

2voto

mahesh Points 131

utilisez seulement json_encode (n'importe quel élément PHP), il sera automatiquement analysé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X