Я использую json_encode
в PHP для кодирования URL-адреса
$json_string = array ('myUrl'=> 'http://example.com'); echo json_encode ($json_string);
Вышеприведенный код генерирует следующую строку JSON:
{"myUrl":"http:\/\/example.com"}
Скорее, чем
{"myUrl":"http://example.com"}
Я просто новичок, какой результат правильный? Может ли JSON-анализатор правильно оценить второй вывод?
Согласно http://www.json.org/ , следует избегать этого персонажа, хотя это не является строго необходимым в JavaScript:
Также прочитайте этот связанный отчет об ошибке на php.net для краткого обсуждения.
См. 2.5 RFC :
Все символы Юникода могут быть помещены в кавычки, за исключением символов, которые должны быть экранированы: кавычка, обратный солидус и управляющие символы (U + 0000 через U + 001F).
Любой символ может быть экранирован.
Таким образом, это не похоже на то, что его нужно избегать, но это может быть, и веб-сайт (и текстовая диаграмма в RFC) иллюстрирует его как экранированный.
Я предполагаю, что авторы этой функции добавили, что ненужное кодирование происходит не более, чем простое незнание. Экранирование косых черт не требуется.
Удивительно большое количество программистов, которых я знаю, так же плохо, как и остальная часть мира. И еще большее число действительно плохо работает с правильной кодировкой и декодированием.
Обновить:
После некоторых поисков я наткнулся на это обсуждение . Это приводит к хорошему моменту, когда избегание a /
иногда необходимо для плохих парсеров HTML. Я столкнулся с проблемой, когда IE 6 неправильно обрабатывает такой контент:
<script> var json = { scriptString: "<script> /* JavaScript here */ </script>" }; </script>
IE 6 увидит </script>
внутри строки и слишком рано закрывает тег скрипта. Таким образом, это более безопасно IE 6 (хотя тег открытия скрипта в строке может также нарушать вещи … я не помню):
<script> var json = { scriptString: "<script> \/* JavaScript here *\/ <\/script>" }; </script>
И они также говорят, что некоторые плохие парсеры увидели //
в http://
и обрабатывали остальную часть строки, как комментарий JavaScript.
Таким образом, похоже, что это еще один случай, когда интернет-технологии захватываются браузером Fail.
Если вы используете php 5.4, вы можете использовать опции json_encode
. см. руководство .
Несколько параметров добавлены в php 5.3, но JSON_UNESCAPED_SLASHES
в 5.4.
Я вижу здесь еще одну проблему. Результат строки {"myUrl":"http://example.com"}
не должен содержать имя участника myUrl. В JavaScript и JSON я считаю, что все объектные литеральные идентификаторы элементов являются некотируемыми строками. Итак, я ожидаю, что результат будет {myUrl:"http://example.com"}
.
Это кажется слишком большой ошибкой в PHP, поэтому я должен ошибаться.
Редактировать, 2/11/11: Да, я ошибаюсь. Синтаксис JSON требует, чтобы имена полей были в двойных кавычках.