Может ли кто-нибудь объяснить этот PHP-код, используя json_encode и json_decode?
Вопрос
$a = '{ "tag": "<b></b>" }';
echo json_encode( json_decode($a) );
Это выводит:
{"tag":"<b><\/b>"}
когда вы могли подумать, что он выведет именно тот ввод.По какой-то причине json_encode добавляет дополнительную косую черту.
Решение
Потому что это часть стандарта JSON.
голец
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) все равно его проанализирует.