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

Как убрать (\)обратный слеш на строку? когда используешь echo json_encode()?

Например:

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

echo json_encode($str);
?>

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

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

12 ответов

Решение
json_encode($response, JSON_UNESCAPED_SLASHES);

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

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

stripslashes(json_encode($array))

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

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

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

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

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

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

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

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

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

Я только что понял, что 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"

Проще было бы

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);

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

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);

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

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

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

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

Но почему ты хочешь?

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

echo json_decode($mystring, JSON_UNESCAPED_SLASHES);

Лучший способ удалить косые черты с помощью флага JSON_UNESCAPED_SLASHES внутри json_decode()

Пример:

      echo json_encode($str, JSON_UNESCAPED_SLASHES);

Вы можете использовать несколько флагов в json_encode().

Пример:

      json_encode($str, JSON_FORCE_OBJECT | JSON_UNESCAPED_SLASHES)

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

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

эти обратные слеши избегают этих цитат

Все ответы с советами по использованиюJSON_UNESCAPED_SLASHESсовершенно неверно, так как этот флаг не влияет на обратную косую черту (\) экранирование, только обычные косые черты (/).

На самом деле единственный вариант — заменить двойную обратную косую черту на одинарную обратную косую черту в результирующей строке, например:

      $str      = 'some \n text';

$encoded  = json_encode($str, JSON_UNESCAPED_SLASHES);
$replaced = str_replace('\\\\', '\\', $encoded);

echo 'Backslashes doubled: ' . $encoded . '<br>';
echo 'Duplicates replaced: ' . $replaced;

Это выведет следующее:

Удвоенная обратная косая черта: "какой-то \\n текст"
Заменены дубликаты: "какой-то\n текст"
Другие вопросы по тегам