JSON字串中特殊字符转义
本帖最后由 cqwcns 于 2019-12-16 13:42 编辑前端有个INPUT用于用户输入数据,点提交后数据会转为JSON(JSON.parse),写入JSON数组。
但如果用户输入的内容包含"或'时,JSON.parse会报错。
我一开始尝试用.replace(/"/g, '')和.replace(/'/g, '')将符号删掉,但显然这不是最好的办法。
我希望通过类似转义的方式,用户输入的特殊字符都能成功JSON.parse。
然后我尝试这样.replace(/"/g, "\'")和.replace(/'/g, '\"'),但发现这样是不行的。
求转义方法。
转base64呗 这货应该是取决于你用哪一个json工具库, 不同的库对其的支持不同。
曾经遇到过一个空格问题, 居然序列化时被json把空格给干掉了。 封装一个方法。
序列化前把单引号和双引号分别替换为自定义的字符。
反序列化后再把自定的字符替换会对应的符号。 。。发完整点这条语句 不好看清楚 引号这些 我发现这样可以解决这个问题。如下:
.replace(/\"/g, "\\\"");
.replace(/\'/g,"\\\'"); 本帖最后由 T1M 于 2019-12-16 16:27 编辑
作为一个非专业前端,感觉如果要硬转eval更不易出错,比如下面
json="{'t':'test\"'}";eval('('+json+')');// 正常转
json="{'t':'test\"'}";JSON.parse(json);// 报错
不过遇到换行之类的eval还是会报错,需要二次转义
json="{'t':'test\"\n'}".replace(/\n/g,"\\n").replace(/\r/g,"\\r");eval('('+json+')');
参考:https://www.cnblogs.com/alsf/p/8662189.html
一般用JSON.parse的地方都是可以确保没有特殊符号的json字符串
个人认为最稳妥的办法是限制前端输入,不要直接输入json。可以这样
json={};json.t="test\"\n";json; T1M 发表于 2019-12-16 16:23
作为一个非专业前端,感觉如果要硬转eval更不易出错,比如下面
json="{'t':'test\"'}";eval('('+json+')') ...
谢谢指导
页:
[1]