Gson disableHtmlEscaping-почему GSON HTML-экранирует по умолчанию в первую очередь?


Я заметил, что GSON HTML-экранирует символы < и >, и это можно отключить с помощью метода конфигурации disableHtmlEscaping() builder. Но мой вопрос - почему GSON делает HTML-экранирование по умолчанию? Каковы риски того, что вы ничего не избежите?

Спасибо.

1   8   2014-04-29 15:48:47

1 ответ:

На самом деле, метод disableHtmlEscaping() говорит Gson не экранировать HTML-символы, такие как <, >, &, =, и '.

Пример, в котором одна цитата, которая вызывает проблемы: рендеринг unescaped JSON в теге <script/> на HTML-странице без использования дополнительного тега <![CDATA[ ... ]]>.

Джоэл Лейч написалотличный ответ на аналогичный вопрос . Вот основные моменты:

Символы, такие как, = и т. д. экранируются, потому что если строка JSON вычисляется по Gson встроен в страницу XHTML, то мы не знаем, какие символы на самом деле обертывают эту строку JSON. Поэтому, если была открытая котировка, то встроенный JSON следовал за закрывающей котировкой, тогда мы не знаем, что произойдет. Может быть, если строка Gson содержит abc=123 и там, оказывается," var abc " определен, то встроенный вывод Gson на странице может привести к тому, что переменной ABC JavaScript будет присвоено значение 123. То же самое может произойти с или даже &.

Что касается экранирования пробела, то \t-экранированный символ для табуляции. Аналогично, \n и \r являются escape-символами для перевода строк и возврата каретки. Экранирование пробелов, подобное этому, должно гарантировать, что любой редактор покажет правильный пробел (если редактор правильно оценивает эти экранированные символы).

Классы

Escaper и JsonWriter содержат дополнительную информацию о полном наборе символов, экранируемых Gson.