Comment puis-je mettre des guillemets à l'intérieur d'une chaîne à l'intérieur d'un ajax réponse JSON en 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?
Edit: je ne suis pas sûr si je l'exprime bien: je veux cette chaîne à l'intérieur de "b" après l'analyse:
hello 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: La page ajax 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 . '"}';
\"
est OK et\u0022
est OK, mais\x22
, si elle est valide dans un JavaScript littéral de chaîne, n'est pas autorisé en JSON.
Vous devez vous connecter pour publier un commentaire.
Viens de l'échapper avec un backslash:
JSON analyseurs de reconnaître
\"
à l'intérieur de double-cité de chaînes comme un guillemet double. Notez que dans le second exemple, la double barre oblique inverse est nécessaire parce qu'il y a un Javascript analyseur de passe, puis un autre parser JSON passer.utiliser juste json_encode (PHP élément ), il analyse automatiquement.
Un peu hors-sujet, vous pouvez utiliser JavaScript/NodeJS sur votre serveur et d'utiliser ES6 modèle de littéraux (les backticks ` utilisé autour de "Chrétien"), mais 7 ans plus tard, vous avez probablement déjà utiliser NodeJS 🙂