Как убрать обратную косую черту в функции json_encode()?
Как убрать (\)
обратный слеш на строку? когда используешь echo json_encode()
?
Например:
<?php
$str = "$(\"#output\").append(\"<p>This is a test!</p>\")";
echo json_encode($str);
?>
примечание: при выводе $str проблем не будет... но при выводе с помощью json_encode()
, (\)
обратный слеш появится.
Есть ли способ решить это? Спасибо.
12 ответов
Начиная с 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:
Если вы используете 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
Да, это возможно. Смотри!
$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 текст"