Sri*_*nt 157 javascript escaping
我必须形成一个JSON字符串,其中一个值具有换行符.这必须转义然后使用AJAX调用发布.任何人都可以建议使用JavaScript来逃避字符串.我没有使用jQuery.
Ale*_*lex 129
拿你的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.
Run Code Online (Sandbox Code Playgroud)
但这很糟糕,不是吗?输入功能的美妙之处在于它们允许您将代码分成几部分并保持脚本的主流清洁,并且不需要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");
};
Run Code Online (Sandbox Code Playgroud)
一旦我们定义了这个函数,代码的主体就像这样简单:
var myJSONString = JSON.stringify(myJSON);
var myEscapedJSONString = myJSONString.escapeSpecialChars();
// myEscapedJSONString is now ready to be POST'ed to the server
Run Code Online (Sandbox Code Playgroud)
Rya*_*yan 62
根据用户667073建议,除了首先重新排序反斜杠替换,并修复报价替换
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');
};
Run Code Online (Sandbox Code Playgroud)
Bal*_*i M 27
像你一样,我一直在寻找几个评论并发布以替换我的JSON中包含html对象的特殊转义字符.
我的目标是删除JSON对象中的特殊字符,并渲染json对象内的html.
这就是我所做的,希望它的使用非常简单.
首先,我做了JSON.stringify我的json对象和JSON.parse结果.
例如:
JSON.parse(JSON.stringify(jsonObject));
Run Code Online (Sandbox Code Playgroud)
它解决了我的问题,并使用纯Javascript完成.
wha*_*ger 22
我不敢说亚历克斯给出的答案是不正确的,温和地说:
这个功能
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')
; };
Run Code Online (Sandbox Code Playgroud)
似乎是一个更好的近似.
小智 10
单引号的小更新
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);
Run Code Online (Sandbox Code Playgroud)
这是一个老帖子.但对于使用angular.fromJson和JSON.stringify的人来说,它可能仍然有用.不推荐使用escape().改用它,
var uri_enc = encodeURIComponent(uri); //before you post the contents
var uri_dec = decodeURIComponent(uri_enc); //before you display/use the contents.
Run Code Online (Sandbox Code Playgroud)
参考http://www.w3schools.com/jsref/jsref_decodeuricomponent.asp
这是一个老问题,但该解决方案对我来说效果不佳,因为它没有解决所有情况。我终于找到了一个在这里完成工作的答案
我将发布我使用转义和编码 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);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
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);
Run Code Online (Sandbox Code Playgroud)