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

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

спасибо.

1 ответов


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

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

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

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

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

The беглец и JsonWriter классы содержат больше информации о полный набор символов, экранированных Gson.