получение json_encode для не выхода из объектов HTML

Я отправляю json_encoded данные от моего сервера PHP до приложения для iPhone. Строки, содержащие объекты HTML, как '&' оставляют json_encode и отправленный как &.

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

  • сделать json_encode не выходят из объектов HTML. Doc говорит, что 'нормальный' режим не должен выходить из него, но это не работает на меня. Какие-либо идеи?

  • сделайте объекты HTML неEscape приложения для iPhone дешево. Единственным путем я могу думать о выполнении, оно теперь включает вращение a XML/HTML parser который является очень дорогим. Какие-либо более дешевые предложения?

Спасибо!

9
задан iDhaval 17 May 2012 в 11:15
поделиться

3 ответа

Ни 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 - это добавляет двойные кавычки вокруг строки.

8
ответ дан 4 December 2019 в 15:11
поделиться

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

.
2
ответ дан 4 December 2019 в 15:11
поделиться

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

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

json_encode($s, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT)

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

3
ответ дан 4 December 2019 в 15:11
поделиться