Как удалить обратную косую черту в функции кодирования json()?


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

Например:

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

echo json_encode($str);
?>

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

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

Author: Ryan, 2011-09-02

10 answers

json_encode($response, JSON_UNESCAPED_SLASHES);
 15
Author: Rijk, 2016-11-07 16:35:53

Начиная с 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

 47
Author: Daveloper87, 2016-02-16 12:41:15

Решение, которое действительно работает, заключается в следующем:

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

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

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

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

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

Да... это некрасиво... но это работает.

Затем у вас остается нечто, отдаленно напоминающее настоящий JSON.

 7
Author: Genia S., 2013-01-12 23:17:52

Более простым способом было бы

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);
 3
Author: HungryDB, 2014-12-10 08:54:25

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

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

Но зачем вам это нужно?

 2
Author: Yeroon, 2011-09-02 14:20:36

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

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);

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

Документация по Json_encode

 2
Author: suarsenegger, 2016-02-18 09:29:43

Я только что понял, что 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"
 2
Author: totas, 2016-05-13 11:55:44

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

stripslashes(json_encode($array))

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

 1
Author: Vuong, 2017-12-22 02:27:26

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

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

Эти обратные косые черты избегают этих кавычек

 0
Author: genesis, 2011-09-02 11:32:11

Я использую следующее, чтобы удалить косые черты

echo json_decode($mystring, JSON_UNESCAPED_SLASHES);
 0
Author: n4zg, 2017-08-23 11:32:38