大方的水煮鱼 · 【走进非洲】投资刚果金,先了解再行动!_地区· 6 月前 · |
俊秀的排球 · 苹果教育优惠打几折 - 百度· 6 月前 · |
率性的山楂 · 北京大学2022届毕业生校友联系人见面会召开· 1 年前 · |
呐喊的乌冬面 · 欲望-三魂七魄-漫画牛· 1 年前 · |
八块腹肌的春卷 · 废文网官方网站入口2021下载-废文网在线阅 ...· 1 年前 · |
我必须形成一个JSON字符串,其中的值包含换行符。这必须转义,然后使用AJAX调用发布。有没有人能建议一种用JavaScript转义字符串的方法。我没有使用jQuery。
使用您的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()
的函数中。让我们继续将它附加到
String
对象的
prototype chain
,这样我们就可以直接在String对象上调用
escapeSpecialChars()
。
如下所示:
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
在JSON.stringify上还有第二个参数。因此,更优雅的解决方案应该是:
function escape (key, val) {
if (typeof(val)!="string") return val;
return val
.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')
var myJSONString = JSON.stringify(myJSON,escape);
单引号的小更新
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);
这是一个古老的问题,但这个解决方案对我来说并不是很有效,因为它并没有解决所有的情况。我终于找到了一个可以完成这项工作的答案 here
我将发布我使用转义和编码uri组件的组合解决方案:
// implement JSON stringify serialization
JSON.stringify = JSON.stringify || function (obj) {
var t = typeof (obj);
if (t != "object" || obj === null) {
// simple data type
if (t == "string") obj = '"'+obj+'"';
return String(obj);
else {
// recurse array or object
var n, v, json = [], arr = (obj && obj.constructor == Array);
for (n in obj) {
v = obj[n]; t = typeof(v);
if (t == "string") v = '"'+v+'"';
else if (t == "object" && v !== null) v = JSON.stringify(v);
json.push((arr ? "" : '"' + n + '":') + String(v));
var rawString = (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
return rawString;
function escape (key, val) {
if (typeof(val)!="string") return val;
var replaced = encodeURIComponent(val);
return replaced;
JSON.stringifyEscaped = function(obj){
return JSON.stringify(obj,escape);
大方的水煮鱼 · 【走进非洲】投资刚果金,先了解再行动!_地区 6 月前 |
俊秀的排球 · 苹果教育优惠打几折 - 百度 6 月前 |
率性的山楂 · 北京大学2022届毕业生校友联系人见面会召开 1 年前 |
呐喊的乌冬面 · 欲望-三魂七魄-漫画牛 1 年前 |