假设我有一个字符串值a\bc
保留在变量中,如何将其转换为像"a\\bc"
这样的代码中的字符串?该字符串可能包含制表符,斜杠,新行等。
我知道在某些浏览器中有一个内置的JSON.stringify
方法,并且有一个JSON2 lib,但我只想让一小段代码只能用于字符串。
答案 0 :(得分:3)
听起来像是过早优化。除非你遇到性能问题,否则我会选择JSON.stringify
,不需要编写额外的代码,也不需要弄清楚如何对其进行编码。
这里的答案都不够好,因为它们不会编码所有可能的内容,例如\n, \r, \t or quotes
这是json.org代码的公然副本,可以满足您的需求。 http://jsfiddle.net/mendesjuan/rFCwF/
function quote(string) {
var escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
var meta = { // table of character substitutions
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'"' : '\\"',
'\\': '\\\\'
}
// If the string contains no control characters, no quote characters, and no
// backslash characters, then we can safely slap some quotes around it.
// Otherwise we must also replace the offending characters with safe escape
// sequences.
escapable.lastIndex = 0;
return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
var c = meta[a];
return typeof c === 'string' ? c :
'\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
}) + '"' : '"' + string + '"';
}
答案 1 :(得分:2)
如果您只想转义斜线并添加引号:
str = ['"', str.replace(/\\/g, '\\\\'), '"'].join('');
答案 2 :(得分:0)
如果你需要一种安全的方法来“逃避”你的字符串,试试这个:
escape(str).replace(/%/g, '\\x')
它使用内部escape
函数,然后将%-url转义格式转换为-string转义格式。