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

Как удалить (\) обратную косую черту в строке? при использовании 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:

http://php.net/manual/en/json.constants.php

решение, которое работает, таково:

 $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)) 

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