JSON序列化HTML实体时<>&处理差异的原因及准确性问询
关于JSON反序列化中HTML实体处理差异的解释
这种差异本质是反序列化器对HTML实体的解码逻辑不同,或是原始JSON的序列化环节做了特殊处理,具体原因可以从这两点拆解:
JSON规范与反序列化库的行为差异
JSON本身只要求转义双引号、反斜杠、换行符等少数字符,<、>、&都不属于必须转义的范畴。所以反序列化时对这些HTML实体的处理,完全取决于所用库的默认配置或逻辑。你遇到的情况,大概率是反序列化器默认只解码了<和>对应的实体(<、>),但没处理&对应的&——有些库会这么设计,是因为<和>容易引发HTML注入风险,自动解码能还原原始文本;而&如果解码成&,可能会破坏原本要保留的HTML实体结构(比如原始内容就是要展示<这段代码,解码后就会变成<)。原始序列化环节的特殊处理
也有可能是生成JSON的序列化器做了差异化转义:比如为了避免<、>被误识别为HTML标签,把它们转成了<、>;但对于&,如果原始内容就是&(即要表示HTML实体的代码),序列化器会把&转成&,最终JSON里的&其实是原始&的转义结果,反序列化后自然保留&。
结果是否准确?
这完全取决于你的原始数据意图:
- 如果原始数据里的
<、&都是HTML实体,预期反序列化后得到对应的原始字符(<、&),那当前结果就是不准确的,你需要调整反序列化器的配置,开启全量HTML实体解码。 - 如果原始数据里的
&本身就是要保留的字符串(比如用来展示HTML实体代码),那这个结果就是符合预期的。
内容的提问来源于stack exchange,提问作者Bertram Gilfoyle
相关产品推荐
相关产品推荐

