我必须形成一个 JSON 字符串,其中一个值具有换行符。这必须被转义,然后使用 AJAX 调用发布。任何人都可以建议一种使用 JavaScript 转义字符串的方法。我没有使用 jQuery。
如何使用 JavaScript 转义包含换行符的 JSON 字符串?
IT技术
javascript
escaping
2021-01-28 23:50:02
6个回答
拿你的 JSON 和.stringify()
它。然后使用.replace()
方法和替换所有出现的\n
用\\n
。
编辑:
据我所知,没有众所周知的 JS 库可以转义字符串中的所有特殊字符。但是,您可以链接该.replace()
方法并替换所有特殊字符,如下所示:
var myJSONString = JSON.stringify(myJSON);
var myEscapedJSONString = myJSONString.replace(/\\n/g, "\\n")
.replace(/\\'/g, "\\'")
.replace(/\\"/g, '\\"')
.replace(/\\&/g, "\\&")
.replace(/\\r/g, "\\r")
.replace(/\\t/g, "\\t")
.replace(/\\b/g, "\\b")
.replace(/\\f/g, "\\f");
// myEscapedJSONString is now ready to be POST'ed to the server.
但这很讨厌,不是吗?进入函数的美妙之处,因为它们允许您将代码分解成碎片并保持脚本的主要流程干净,并且没有 8 个链式.replace()
调用。因此,让我们将该功能放入一个名为, 的函数中escapeSpecialChars()
。让我们继续前进,并将其连接到prototype chain
该的String
对象,所以我们可以调用escapeSpecialChars()
直接对String对象。
像这样:
String.prototype.escapeSpecialChars = function() {
return this.replace(/\\n/g, "\\n")
.replace(/\\'/g, "\\'")
.replace(/\\"/g, '\\"')
.replace(/\\&/g, "\\&")
.replace(/\\r/g, "\\r")
.replace(/\\t/g, "\\t")
.replace(/\\b/g, "\\b")
.replace(/\\f/g, "\\f");
};
一旦我们定义了这个函数,我们的代码主体就这么简单:
var myJSONString = JSON.stringify(myJSON);
var myEscapedJSONString = myJSONString.escapeSpecialChars();
// myEscapedJSONString is now ready to be POST'ed to the server
根据 user667073 建议,除了首先重新排序反斜杠替换,并修复引用替换
escape = function (str) {
return str
.replace(/[\\]/g, '\\\\')
.replace(/[\"]/g, '\\\"')
.replace(/[\/]/g, '\\/')
.replace(/[\b]/g, '\\b')
.replace(/[\f]/g, '\\f')
.replace(/[\n]/g, '\\n')
.replace(/[\r]/g, '\\r')
.replace(/[\t]/g, '\\t');
};
像您一样,我一直在查看一些评论并发布以替换我的 JSON 中包含 html 对象的特殊转义字符。
我的目标是删除 JSON 对象中的特殊字符,并渲染 json 对象内的 html。
这是我所做的,希望它使用起来非常简单。
首先我做了 JSON.stringify 我的 json 对象和 JSON.parse 结果。
例如:
JSON.parse(JSON.stringify(jsonObject));
它解决了我的问题并使用 Pure Javascript 完成。
我不敢说亚历克斯给出的答案是相当不正确的,委婉地说:
- Alex 尝试转义的某些字符根本不需要转义(例如 & 和 ');
- \b 根本不是退格字符而是单词边界匹配
- 不处理需要转义的字符。
这个功能
escape = function (str) {
// TODO: escape %x75 4HEXDIG ?? chars
return str
.replace(/[\"]/g, '\\"')
.replace(/[\\]/g, '\\\\')
.replace(/[\/]/g, '\\/')
.replace(/[\b]/g, '\\b')
.replace(/[\f]/g, '\\f')
.replace(/[\n]/g, '\\n')
.replace(/[\r]/g, '\\r')
.replace(/[\t]/g, '\\t')
; };
似乎是一个更好的近似值。
单引号的小更新
function escape (key, val) {
if (typeof(val)!="string") return val;
return val
.replace(/[\\]/g, '\\\\')
.replace(/[\/]/g, '\\/')
.replace(/[\b]/g, '\\b')
.replace(/[\f]/g, '\\f')
.replace(/[\n]/g, '\\n')
.replace(/[\r]/g, '\\r')
.replace(/[\t]/g, '\\t')
.replace(/[\"]/g, '\\"')
.replace(/\\'/g, "\\'");
}
var myJSONString = JSON.stringify(myJSON,escape);
其它你可能感兴趣的问题