получение json_encode, чтобы не избежать html-сущностей - PullRequest
9 голосов
/ 27 июля 2010

Я отправляю данные json_encoded со своего PHP-сервера в приложение для iPhone. Строки, содержащие html-сущности, такие как '&', экранируются json_encode и отправляются как &.

Я хочу сделать одну из двух вещей:

  • сделать json_encode не экранированием html-сущностей. Док говорит, что «нормальный» режим не должен избегать его, но он не работает для меня. Есть идеи?

  • позволяет приложению iPhone дешево обходиться без HTML-объектов. Единственный способ сделать это сейчас - задействовать XML/HTML parser, что очень дорого. Есть предложения дешевле?

Спасибо!

Ответы [ 4 ]

8 голосов
/ 27 июля 2010

Ни PHP 5.3, ни PHP 5.2 не касаются сущностей HTML.

Вы можете проверить это с помощью следующего кода:

<?php
header("Content-type: text/plain"); //makes sure entities are not interpreted
$s = 'A string with &amp; &#x6F8 entities';
echo json_encode($s);

Вы увидите толькоPHP делает двойные кавычки вокруг строки.

3 голосов
/ 27 июля 2010

json_encode не делает этого. У вас есть другой компонент, который выполняет кодировку HTML.

Если вы используете опции JSON_HEX_, вы можете избежать появления любых символов < или & в выходных данных (они будут преобразованы в \u003C или подобные строковые литералы JS), таким образом, возможно, избегая проблема:

json_encode($s, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT)

хотя это будет зависеть от точного знания того, какие символы кодируются в HTML ниже. Может быть, не-ASCII символы тоже?

2 голосов
/ 27 июля 2010

На основании руководства представляется, что json_encode не должен выходить за пределы ваших сущностей, если вы явно не укажете это в PHP 5.3. Возможно, вы используете более старую версию PHP?

0 голосов
/ 17 января 2016

Исходя из ответа Artefacto, я бы порекомендовал использовать этот заголовок, он специально предназначен для данных JSON вместо простого текста.

<?php
header('Content-Type: application/json'); //Also makes sure entities are not interpreted
$s = 'A string with &amp; &#x6F8 entities';
echo json_encode($s);

Убедитесь, что вы прочитали этот пост по более конкретным причинам, почемучтобы использовать этот тип контента, Каков правильный тип контента JSON?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...