03月11 json解析单引号的问题
今天遇到一个非常诡异的问题,应用场景为将用户的输入数据,经过转义(php addslashes),插入到数据库中。查询时,从数据库里获得转义后的字符串,进行json解析。
主要测试了三个转义字符即\,’,”的场景,单个符号和其他组合都能正确的转义和解析。但唯独\’连在一起时,json解析会报错
用户输入:test_\’
数据库里存储:test_\\\’
api返回:test_\\\’
json解析报错:ValueError: Invalid \escape
对应的\”情况
用户输入:test_\”
数据库里存储:test_\\\”
api返回:test_\\\”
json解析成功
出错的json字符串如下,并没有发现哪里不符合json规范的地方:
{“code”:0,”data”:{“testId”:”test-56e282ae59eec”,”testName”:”test_\\\'”}}
成功的json字符串如下,只是’换成了”
{“code”:0,”data”:{“testId”:”test-56e282ae59eec”,”testName”:”test_\\\””}}
google查阅和问同事朋友也没有结果,最后通过限定了输入只能包括字母数字和下划线来避免这个解析问题,在这里记下来希望以后能解决
update: json的标准不支持单引号,统一用双引号,参考资料,但是其他语言的转义函数是会对单引号进行转义操作的。好吧,真蛋疼