web-dev-qa-db-fra.com

Comment supprimer une barre oblique inverse sur la fonction json_encode ()?

Comment supprimer le (\)backslash sur une chaîne? en utilisant echo json_encode()?

Par exemple:

<?php
$str = "$(\"#output\").append(\"<p>This is a test!</p>\")";

echo json_encode($str);
?>

remarque: lorsque vous echo $ str, il n'y aura pas de problème ... mais lorsque vous utiliserez json_encode(), la (\)backslash s'affichera.

Y a-t-il un moyen de résoudre ce problème? Je vous remercie.

17
Ryan
json_encode($response, JSON_UNESCAPED_SLASHES);
22
Rijk

Depuis PHP 5.4, il existe des constantes que json_encode() peut utiliser pour formater le repertoire json comme vous le souhaitez.

Pour supprimer les barres obliques inverses, utilisez: JSON_UNESCAPED_SLASHES. Ainsi:

json_encode($response, JSON_UNESCAPED_SLASHES);

Consultez la documentation PHP pour plus de constantes et d'informations supplémentaires:

http://php.net/manual/en/function.json-encode.php

Liste des constantes JSON:

http://php.net/manual/en/json.constants.php

46
Daveloper87

la solution qui fonctionne est la suivante:

$str = preg_replace('/\\\"/',"\"", $str);

Cependant, vous devez être extrêmement prudent ici, car vous devez vous assurer que toutes vos valeurs ont leurs guillemets échappées (ce qui est généralement vrai de toute façon, mais surtout maintenant que vous supprimerez toutes les échappées de l'idiot (et dysfonctionnel) de PHP "helper "fonctionnalité de l'ajout de barres obliques inverses inutiles devant tous vos identifiants d'objet et valeurs).

Ainsi, php, par défaut, double échappe à vos valeurs qui contiennent une citation. Ainsi, si vous avez la valeur My name is "Joe" dans votre base de données, php le rapportera sous la forme My name is \\"Joe\\".

Cela peut ou peut ne pas vous être utile. Si ce n'est pas le cas, vous pouvez alors remplacer le slash initial comme suit:

$str = preg_replace('/\\\\\"/',"\"", $str);

oui ... c'est moche ... mais ça marche. 

Vous vous retrouvez alors avec quelque chose qui ressemble vaguement au JSON réel.

7
Genia S.

Je viens de comprendre que json_encode n'échappe que \n s'il est utilisé entre guillemets simples.

echo json_encode("Hello World\n");
// results in "Hello World\n"

Et

echo json_encode('Hello World\n');
// results in "Hello World\\\n"
3
totas

Manière plus simple serait

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);
3
HungryDB

Comme HungryDB l'a dit, le moyen le plus simple de le faire est:

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);

Regardez votre version php car ce paramètre a été ajouté à la version 5.4.0

documentation json_encode

2
suarsenegger

Oui c'est possible. Regardez!

$str = str_replace('\\', '', $str);

Mais pourquoi voudriez-vous?

2
Yeroon

Si vous utilisez PHP 5.2, json_encode n'attend qu'un seul paramètre lors de son appel. Ceci est une alternative à la barre oblique unescape des valeurs json:

stripslashes(json_encode($array))

Ne l'utilisez pas si vos données sont compliquées.

2
Vuong

Vous ne voulez pas le supprimer. JSON utilise des guillemets doubles pour les chaînes et votre

"$(\"#output\").append(\"
This is a test!<\/p>\")"

ces barres obliques inverses échappent à ces citations

0
genesis

J'utilise ce qui suit pour supprimer les barres obliques

echo json_decode($mystring, JSON_UNESCAPED_SLASHES);
0
n4zg