我注意到GSON HTML-escape <
和>
个字符,可以使用disableHtmlEscaping()
构建器配置方法禁用此字符。但我的问题是 - 为什么GSON默认会进行HTML转义?没有HTML转义的风险是什么?
感谢。
答案 0 :(得分:7)
实际上,disableHtmlEscaping()
方法告诉Gson不要转义HTML字符,例如<
,>
,&
,=
和{{1} }。
导致问题的单引号的示例:在HTML页面的'
标记中呈现未转义的JSON而不使用其他<script/>
标记。
Joel Leitch写道a great response to a similar question。以下是重点:
诸如&lt;,&gt;,=等字符被转义,因为如果Gson评估的JSON字符串嵌入在XHTML页面中,那么我们不知道实际包装此JSON字符串的字符是什么。因此,如果有一个开放的报价,那么嵌入的JSON后跟一个收盘报价,那么我们不知道会发生什么。也许如果Gson字符串包含abc = 123并且恰好有一个“var abc”定义,则页面中嵌入的Gson输出可能会导致abc JavaScript变量被赋值123.同样的事情可能发生在&lt ;和&gt;甚至&amp;。
对于空格转义,\ t是标签的转义字符。同样,\ n和\ r是换行符和回车符的转义字符。像这样转义空格应确保任何编辑器都显示正确的空格(如果编辑器正确评估这些转义字符)。
Escaper和JsonWriter类包含有关Gson转义的完整字符集的更多信息。