Почему кодер JSON добавляет escape-символ при кодировании URL-адресов?

Я использую 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-анализатор правильно оценить второй вывод?

Solutions Collecting From Web of "Почему кодер JSON добавляет escape-символ при кодировании URL-адресов?"

Согласно 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 требует, чтобы имена полей были в двойных кавычках.