Как убрать обратную косую черту в функции json_encode ()? - PullRequest
19 голосов
/ 02 сентября 2011

Как удалить обратную косую черту (\) в строке?при использовании echo json_encode()?

Например:

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

echo json_encode($str);
?>

примечание: при выводе $ str проблем не будет ... но при выводе с помощью json_encode(),появится обратный слеш (\).

Есть ли способ решить эту проблему?

Ответы [ 10 ]

48 голосов
/ 26 марта 2014

Начиная с PHP 5.4, есть константы, которые могут использоваться json_encode() для форматирования ответа json, как вы хотите.

Для удаления обратной косой черты используйте: JSON_UNESCAPED_SLASHES.Примерно так:

json_encode($response, JSON_UNESCAPED_SLASHES);

Для получения дополнительных констант и дополнительной информации просмотрите документацию PHP:

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

Список констант JSON:

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

24 голосов
/ 02 сентября 2011
json_encode($response, JSON_UNESCAPED_SLASHES);
8 голосов
/ 13 января 2013

решение, которое действительно работает, это:

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

Однако вы должны быть здесь очень осторожны, потому что вам нужно убедиться, что все ваши значения не имеют своих кавычек (что в общем случае верно, но особенно теперь, когда вы удалите все выходы из идиотского PHP (и дисфункционального) ) «вспомогательная» функция добавления ненужных обратных слешей перед всеми вашими объектными идентификаторами и значениями).

Итак, php по умолчанию удваивает экранирование ваших значений, в которых есть кавычка, поэтому, если у вас есть значение My name is "Joe" в вашей БД, php вернет это как My name is \\"Joe\\".

Это может или не может быть полезно для вас. Если это не так, вы можете сделать дополнительный шаг, чтобы заменить начальный слеш там следующим образом:

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

да ... это уродливо ... но это работает.

Затем вы остаетесь с чем-то, что смутно напоминает настоящий JSON.

4 голосов
/ 13 мая 2016

Я только что понял, что json_encode экранирует \n, только если он используется в одинарных кавычках.

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

И

echo json_encode('Hello World\n');
// results in "Hello World\\\n"
4 голосов
/ 10 декабря 2014

Более простой способ будет

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);
3 голосов
/ 22 декабря 2017

Если вы используете PHP 5.2, json_encode ожидает только 1 параметр при вызове.Это альтернатива unescape слешу значений json:

stripslashes(json_encode($array))

Не используйте его, если ваши данные сложны.

3 голосов
/ 18 февраля 2016

Как сказал HungryDB, более простой способ сделать это:

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);

Посмотрите на вашу версию php , потому что этот параметр был добавлен в версии 5.4.0

документация json_encode

3 голосов
/ 02 сентября 2011

Да, это возможно. Смотри!

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

Но почему вы хотите?

1 голос
/ 23 августа 2017

Я использую следующее для удаления слешей

echo json_decode($mystring, JSON_UNESCAPED_SLASHES);
1 голос
/ 02 сентября 2011

Вы не хотите его удалять.Поскольку JSON использует двойные кавычки "" для строк, а ваш возвращает

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

, эти обратные слэши экранируют эти кавычки

...