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

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

Например:

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

echo json_encode($str);
?>

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

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

Ответ 1

json_encode($response, JSON_UNESCAPED_SLASHES);

Ответ 2

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

Ответ 3

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

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

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

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

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

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

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

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

Ответ 4

Проще будет

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);

Ответ 5

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

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

А также

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

Ответ 6

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

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

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

Ответ 7

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

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);

Взгляните на версию php, поскольку этот параметр был добавлен в версию 5.4.0

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

Ответ 8

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

stripslashes(json_encode($array))

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

Ответ 9

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

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

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

Ответ 10

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

echo json_decode($mystring, JSON_UNESCAPED_SLASHES);