Я отправляю json_encoded
данные с моего PHP-сервера в приложение iPhone. Строки, содержащие html-объекты, такие как '&'
, экранируются json_encode
и отправляются как &
,
Я хочу сделать одно из двух:
make json_encode
не json_encode
html-объекты. Док говорит, что «нормальный» режим не должен убегать, но он не работает для меня. Есть идеи?
сделайте iPhone-приложение дешевым html-объектами. Единственный способ, с помощью которого я могу сейчас это сделать, – XML/HTML parser
который очень дорог. Какие-нибудь более дешевые предложения?
Благодаря!
Ни PHP 5.3, ни PHP 5.2 не касаются объектов HTML.
Вы можете проверить это следующим кодом:
<?php header("Content-type: text/plain"); //makes sure entities are not interpreted $s = 'A string with & ۸ entities'; echo json_encode($s);
Вы увидите единственное, что делает PHP, – это добавить двойные кавычки вокруг строки.
json_encode
этого не делает. У вас есть другой компонент, который выполняет кодировку HTML.
Если вы используете параметры JSON_HEX_
, вы можете избежать появления каких-либо символов <
или &
на выходе (они будут преобразованы в \u003C
или аналогичные \u003C
последовательности строк JS), что позволит избежать проблемы:
json_encode($s, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT)
хотя это будет зависеть от того, как точно знать, какие символы кодируются HTML дальше по течению. Может быть, и не-ASCII-символы?
Основываясь на руководстве, похоже, что json_encode не должен избегать ваших объектов, если вы не указали его явно в PHP 5.3. Возможно, вы используете старую версию PHP?
Отправляясь от ответа Artefacto, я бы рекомендовал использовать этот заголовок, он специально разработан для данных JSON, а не просто использует обычный текст.
<?php header('Content-Type: application/json'); //Also makes sure entities are not interpreted $s = 'A string with & ۸ entities'; echo json_encode($s);
Убедитесь, что вы проверяете это сообщение по более конкретным причинам, почему использовать этот тип контента. Каков правильный тип контента JSON?