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