2011-12-14 237 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轉義格式。

相關問題