Может ли кто-нибудь объяснить этот PHP-код, используя json_encode и json_decode?

StackOverflow https://stackoverflow.com/questions/127739

  •  02-07-2019
  •  | 
  •  

Вопрос

  $a = '{ "tag": "<b></b>" }';
  echo json_encode( json_decode($a) );

Это выводит:

{"tag":"<b><\/b>"}

когда вы могли подумать, что он выведет именно тот ввод.По какой-то причине json_encode добавляет дополнительную косую черту.

Это было полезно?

Решение

Потому что это часть стандарта JSON.

http://json.org/

голец

any-Unicode-character-
    except-"-or-\-or-
    control-character
\"
\\
\/ <---- see here?
\b
\f
\n
\r
\t
\u four-hex-digits

Другие советы

использовать это:

echo json_encode($a,JSON_HEX_TAG)

Результат будет:

["\u003C\u003E"]

Вы можете прочитать эту статью, чтобы улучшить свои знания о JSON_ENCODE.http://php.net/manual/en/function.json-encode.php

Вероятно, это функция безопасности.Экранированная версия (напр.вывод) будет анализироваться Javascript как аналогичная неэкранированной версии (например. \/ становится /).Избежав такой косой черты, вероятность того, что браузер неправильно интерпретирует строку Javascript как HTML, снижается.Конечно, если вы правильно относитесь к данным, в этом нет необходимости, так что это скорее защита от невежественного программиста, который все испортит.

Ваш ввод не является допустимым JSON, но анализатор JSON PHP (как и большинство анализаторов JSON) все равно его проанализирует.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top