Как удалить обратную косую черту в функции кодирования json()?
Как удалить обратную косую черту (\)
в строке? при использовании echo json_encode()
?
Например:
<?php
$str = "$(\"#output\").append(\"<p>This is a test!</p>\")";
echo json_encode($str);
?>
Примечание: Когда вы повторяете $str, проблем не будет... но когда вы повторяете с помощью json_encode()
, появится обратная косая черта (\)
.
Есть ли способ решить эту проблему? Спасибо.
10 answers
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:
Решение, которое действительно работает, заключается в следующем:
$str = preg_replace('/\\\"/',"\"", $str);
Однако здесь вы должны быть предельно осторожны, потому что вам нужно убедиться, что все ваши значения экранированы кавычками (что в любом случае в целом верно, но особенно сейчас, когда вы будете удалять все экранирования из идиотской (и дисфункциональной) "вспомогательной" функции PHP, добавляющей ненужные обратные косые черты перед всеми вашими идентификаторами объектов и значениями).
Итак, php по умолчанию дважды экранирует ваши значения, которые имеют в них есть цитата, поэтому, если у вас есть значение My name is "Joe"
в вашей БД, php вернет это как
My name is \\"Joe\\"
.
Это может быть вам полезно, а может и не быть. Если это не так, вы можете сделать дополнительный шаг, заменив там начальную косую черту следующим образом:
$str = preg_replace('/\\\\\"/',"\"", $str);
Да... это некрасиво... но это работает.
Затем у вас остается нечто, отдаленно напоминающее настоящий JSON.
Более простым способом было бы
$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);
Да, это возможно. Смотри!
$str = str_replace('\\', '', $str);
Но зачем вам это нужно?
Как сказал HungryDB, более простой способ сделать это:
$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);
Посмотрите на свою версию php, потому что этот параметр был добавлен в версии 5.4.0
Я только что понял, что 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"
Если вы используете PHP 5.2, json_encode просто ожидает только 1 параметр при его вызове. Это альтернатива неэкранированной косой черте значений json:
stripslashes(json_encode($array))
Не используйте его, если ваши данные сложны.
Вы не хотите удалять его. Потому что JSON использует двойные кавычки "" для строк, а ваш возвращает
"$(\"#output\").append(\"
This is a test!<\/p>\")"
Эти обратные косые черты избегают этих кавычек
Я использую следующее, чтобы удалить косые черты
echo json_decode($mystring, JSON_UNESCAPED_SLASHES);