如何将JavaScript中的字符串值转换为代码中的字符串?

时间:2011-12-14 16:50:13

标签: javascript json

假设我有一个字符串值a\bc保留在变量中,如何将其转换为像"a\\bc"这样的代码中的字符串?该字符串可能包含制表符,斜杠,新行等。

我知道在某些浏览器中有一个内置的JSON.stringify方法,并且有一个JSON2 lib,但我只想让一小段代码只能用于字符串。

3 个答案:

答案 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转义格式。