2011-12-14 88 views
0

说我有一个字符串值a\bc保持在一个变量,我怎么能把它变成像"a\\bc"代码字符串?可能包含制表符,斜杠,新线路的串等如何将JavaScript中的字符串值转换为代码中的字符串?

我知道有一个内置在某些浏览器JSON.stringify方法,有一个JSON2的lib,但我只是想有一个最低的代码都可以做的工作仅为字符串。

+1

是否要将任意的Javascript字符串转换为JSON字符串值?或者你想逃避反斜杠和其他角色?给出更多/之后的例子。 – 2011-12-14 16:56:47

+0

我该如何将仲裁JavaScript字符串转换为JSON字符串值。 – 2011-12-15 03:16:02

回答

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 + '"'; 
} 
2

如果你只是想逃避斜线,并添加引号:

str = ['"', str.replace(/\\/g, '\\\\'), '"'].join(''); 
+0

啊,我忘了外引号。 +1 – RightSaidFred 2011-12-14 16:55:38

+0

默认加入行为是加入佣金 – 2011-12-14 16:55:44

0

如果你需要一个安全的方法“逃”你的字符串,试试这个:

escape(str).replace(/%/g, '\\x') 

它使用内部escape功能,那么,转换%-url逃避格式-string转义格式。

相关问题