Php удалить обратные слеши json

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

Как убрать (\) обратный слеш на строку? когда используешь echo json_encode() ?

This is a test!

\")"; echo json_encode($str); ?>

примечание: при выводе $str проблем не будет. но при выводе с помощью json_encode() , (\) обратный слеш появится.

Есть ли способ решить это? Спасибо.

12 ответов

json_encode($response, JSON_UNESCAPED_SLASHES); 

Начиная с PHP 5.4 существуют константы, которые могут быть использованы json_encode() отформатировать ответ JSON, как вы хотите.

Для удаления обратной косой черты используйте: JSON_UNESCAPED_SLASHES , Вот так:

json_encode($response, JSON_UNESCAPED_SLASHES); 

Посмотрите документацию PHP для получения дополнительных констант и дополнительной информации:

Если вы используете PHP 5.2, json_encode ожидает только 1 параметр при вызове. Это альтернатива unescape-слешу значений json:

stripslashes(json_encode($array)) 

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

Решение, которое действительно работает, это:

Однако вы должны быть здесь очень осторожны, потому что вам нужно убедиться, что все ваши значения имеют свои кавычки, которые экранированы (что в общем случае верно, но особенно теперь, когда вы удалите все экранированные символы из идиотского (и дисфункционального) помощника PHP «». «функциональность добавления ненужных обратных слешей перед всеми вашими объектными идентификаторами и значениями).

Таким образом, php по умолчанию дважды экранирует ваши значения, в которых есть кавычка, так что если у вас есть значение My name is «Joe» в вашей БД php вернет это как My name is \\»Joe\\» ,

Это может или не может быть полезным для вас. Если это не так, вы можете сделать дополнительный шаг, чтобы заменить начальный слеш там следующим образом:

да. это уродливо. но это работает.

Затем вы остаетесь с чем-то, что смутно напоминает настоящий 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

Источник

Как бороться с обратной косой чертой в JSON-строки PHP

Кажется, есть странность с json_encode и/или json_decode при попытке декодирования строки, созданной json_encode:

 $object = new stdClass; $object->namespace = 'myCompany\package\subpackage'; $jsonEncodedString = json_encode($object); echo $jsonEncodedString; // Result of echo being: // $anotherObject = json_decode($jsonEncodedString); echo $anotherObject->namespace; // Result of echo being: // myCompany\package\subpackage $yetAnotherObject = json_decode(''); // Result should be: // myCompany\package\subpackage // But returns an invalid string sequence error instead. echo json_last_error_msg(); 

Я никогда не испытывал проблемы до этого, так как мне никогда не приходилось захватывать строку с обратными косыми чертами до сегодняшнего дня. При рассмотрении вышеприведенного кода я могу кодировать/декодировать, используя встроенные компоненты PHP. Однако, если я попытаюсь декодировать строку, созданную этим кодировщиком, я получаю сообщение об ошибке. Я читал в таких документах, как «» Предопределенные константы» и другие вопросы в стеке, такие как «как удалить обратную косую черту ( «\» ) в ответ json с помощью php?». Но я не могу найти причину ПОЧЕМУ я не могу декодировать строку, созданную json_encode. Версия PHP, которую я использую для тестирования этого кода, составляет 5.5.9. Я знаю, что я мог бы быть совершенно незнакомым из-за отсутствия чего-то, но должен ли я обрабатывать свою строку, созданную json_encode по-другому, если я попытаюсь использовать ее в другом месте?

4 ответа

$jsonEncodedString = json_encode($object); echo $jsonEncodedString; // Result of echo being: //
$yetAnotherObject = json_decode(''); 

Обратная косая черта ( \ ) является специальным символом как в PHP, так и в JSON. Оба языка используют его для исключения специальных символов в строках и для того, чтобы правильно представлять обратную косую черту в строках, вам нужно добавить еще одну обратную косую черту в PHP и JSON. Попробуйте выполнить работу парсера PHP в строке выше. После открытой круглой скобки встречается строка заключенная в одинарные кавычки. Есть два специальных символа, которые нужно экранировать в строках одиночной кавычки: апостроф ( ‘ ) и обратная косая черта ( \ ). В то время как апостроф всегда нуждается в экранировании, интерпретатор PHP прощает и позволяет избежать обратного слэша, если не создает путаницы. Однако правильное представление обратной косой черты внутри одиночных кавычек строк \\ . Строка, переданная функции json_decode() , есть

Обратите внимание, что это точный список символов, обработанных во время выполнения, а не строка, представленная на PHP или на любом другом языке. Языки имеют специальные правила для представления специальных символов. Это просто текст. Текст выше интерпретируется функцией json_decode() , которая ожидает, что она будет частью JSON . JSON — небольшой язык, он имеет специальные правила для кодирования специальных символов в строках. Обратная косая черта является одним из этих символов, и когда она появляется в строке, она должна быть добавлена ​​другой обратной косой чертой. JSON не прощает; когда он встречает обратную косую черту, он всегда рассматривает его как escape-символ для следующего символа в строке. Объект, созданный json_decode() после успешного анализа представленного вами JSON-представления, содержит одно свойство с именем namespace , значение которого:

myCompany\package\subpackage 

Что пошло не так?

$yetAnotherObject = json_decode(''); 

Парсер PHP интерпретирует код выше, используя правила PHP. Он понимает, что функция json_decode() должна быть вызвана с текстом <"namespace":"myCompany\package\subpackage">в качестве аргумента. json_decode() использует свои правила и пытается интерпретировать текст выше как часть представления JSON. Цитата ( » ) перед myCompany сообщает, что «myCompany\package\subpackage» должен анализироваться как строка. Обратная косая черта перед package интерпретируется как escape-символ для p , но \p не является допустимой escape-последовательностью для строк в JSON. Вот почему он отказывается продолжать и возвращает NULL .

Источник

How to remove backslash on json_encode() function?

You can use the JSON_UNESCAPED_SLASHES option in the json_encode() function to prevent backslashes from being added to the JSON string.

 // Define an array of data to encode as JSON $data = [ 'name' => 'John Doe', 'age' => 30, 'email' => '[email protected]', ]; // Encode the array as a JSON string, with slashes unescaped $json = json_encode($data, JSON_UNESCAPED_SLASHES); // Output the resulting JSON string echo $json;
 // Define an array of data to encode as JSON $data = [ 'name' => 'John Doe', 'age' => 30, 'email' => '[email protected]', 'favorite_quotes' => [ "We can't solve problems by using the same kind of thinking we used when we created them. - Albert Einstein", "The greatest glory in living lies not in never falling, but in rising every time we fall. - Nelson Mandela", ], ]; // Encode the array as a JSON string, with Unicode escape sequences replaced $json = json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); $json = preg_replace_callback( '/\\\\u([a-f0-9])/i', function ($match) < return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE'); >, $json ); // Output the resulting JSON string echo $json;

Источник

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

Как удалить (\) обратную косую черту в строке? при использовании echo json_encode() ?

php $str = "$(\"#output\").append(\"

This is a test!

\")"; 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 для получения дополнительных констант и дополнительной информации:

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

Однако вы должны быть предельно осторожны, потому что вам нужно убедиться, что все ваши значения не имеют кавычек (что в общем случае верно в любом случае, но тем более теперь, когда вы будете лишать всех побегов от идиотского (и дисфункционального) PHP-хелпера «функциональность добавления ненужных обратных косых черт перед всеми вашими идентификаторами объектов и значениями).

Таким образом, php, по умолчанию, удваивает escape-значения ваших значений, у которых есть цитата в них, поэтому, если у вас есть значение My name is «Joe» в вашей БД, php вернет его, так как My name is \\»Joe\\» .

Это может быть или не быть полезным для вас. Если это не так, вы можете сделать дополнительный шаг по замене ведущей косой черты следующим образом:

да … это уродливо … но это работает.

Затем вы остаетесь с чем-то, что смутно напоминает настоящий JSON.

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES); 

Как сказал HungryDB, более простой способ сделать это:

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES); 

Взгляните на версию php, поскольку этот параметр был добавлен в версию 5.4.0

Я просто понял, что 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!\")" 

эти обратные косые черты избегают этих котировок

Я использую следующее, чтобы удалить косые черты

echo json_decode($mystring, JSON_UNESCAPED_SLASHES); 

Если вы используете PHP 5.2, json_encode просто ожидает только 1 параметр при вызове. Это альтернатива unescape slash значений json:

stripslashes(json_encode($array)) 

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

Источник

Читайте также:  Форма открывается при нажатии java
Оцените статью