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