我必须形成一个JSON字符串,其中一个值有新的行字符。这必须转义,然后使用AJAX调用发布。谁能建议一种用JavaScript转义字符串的方法?我没有使用jQuery。
当前回答
如果您的服务器端脚本是PHP,请使用json_encode(), Json_encode()转义换行符和其他意想不到的标记 (如果不使用PHP,请为您的脚本语言寻找类似的函数)
然后在JavaScript中使用$.parseJSON(),完成!
其他回答
使用encodeURIComponent()对字符串进行编码。
例如。var myEscapedJSONString = encodeURIComponent(JSON.stringify(myJSON));
你不需要解码它,因为web服务器会自动做同样的事情。
这是一个老问题,但这个解决方案对我来说并不是很有效,因为它并没有解决所有的情况。我终于找到了一个答案
我将发布使用escape和encode 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);
}
根据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');
};
这是一个旧帖子。但对于那些使用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.
ref http://www.w3schools.com/jsref/jsref_decodeuricomponent.asp
我在我的一个Ajax调用中得到了相同的情况,其中JSON由于Textarea字段中的换行符抛出了一个错误。这里给出的解决方案对我没用。 所以我使用Javascript的.escape函数,它工作得很好。然后,为了从JSON中检索值,我使用.unescape进行了反转义。