吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2658|回复: 8
收起左侧

[求助] JSON字串中特殊字符转义

[复制链接]
cqwcns 发表于 2019-12-16 13:37
本帖最后由 cqwcns 于 2019-12-16 13:42 编辑

前端有个INPUT用于用户输入数据,点提交后数据会转为JSON(JSON.parse),写入JSON数组。


但如果用户输入的内容包含"或'时,JSON.parse会报错。


我一开始尝试用.replace(/"/g, '')和.replace(/'/g, '')将符号删掉,但显然这不是最好的办法。


我希望通过类似转义的方式,用户输入的特殊字符都能成功JSON.parse。
然后我尝试这样.replace(/"/g, "\'")和.replace(/'/g, '\"'),但发现这样是不行的。

求转义方法。


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

逍遥一仙 发表于 2019-12-16 13:59
转base64呗
coolcalf 发表于 2019-12-16 14:01
这货应该是取决于你用哪一个json工具库, 不同的库对其的支持不同。
曾经遇到过一个空格问题, 居然序列化时被json把空格给干掉了。
414269678 发表于 2019-12-16 14:03
封装一个方法。
序列化前把单引号和双引号分别替换为自定义的字符。
反序列化后再把自定的字符替换会对应的符号。
落神 发表于 2019-12-16 14:21
。。发完整点这条语句 不好看清楚 引号这些
头像被屏蔽
小非凡 发表于 2019-12-16 14:30
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| cqwcns 发表于 2019-12-16 15:00
我发现这样可以解决这个问题。如下:
.replace(/\"/g, "\\\"");
.replace(/\'/g,"\\\'");
T1M 发表于 2019-12-16 16:23
本帖最后由 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;
 楼主| cqwcns 发表于 2019-12-16 18:14
T1M 发表于 2019-12-16 16:23
作为一个非专业前端,感觉如果要硬转eval更不易出错,比如下面
json="{'t':'test\"'}";eval('('+json+')') ...

谢谢指导
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 20:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表