2011-12-14 5 views
0

私は文字列値a\bcを変数に保持しているとします。"a\\bc"のようなコードで文字列に変換するにはどうすればよいですか?文字列にタブ、スラッシュ、改行などが含まれている可能性がありますJavaScriptの文字列値をコード内の文字列に変換するにはどうすればよいですか?

いくつかのブラウザにはJSON.stringifyメソッドがあり、そこにはJSON2というコードが含まれていますが、私はちょうどそのコードを最小限必要としたいだけです文字列の場合。

+1

任意のJavascript文字列をJSON文字列値に変換しますか?または、バックスラッシュとその他の文字だけをエスケープしたいですか?前/後の例をもっと与える。 –

+0

I arbitray JavaScript文字列をJSON文字列値に変換する方法を教えてください。 –

答えて

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

ありがとう。 JSON.stringifyを使わないでスクリプトが動作するかもしれないので、私はコードの実装を文字列に埋め込むことを試みています。 –

2

あなただけのスラッシュをエスケープ引用符を追加したい場合は、次の

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

ああ、私は外側の引用符を忘れていました。 +1 – RightSaidFred

+0

デフォルトの振る舞いは、COMMONで結合することです –

+0

@JuanMendes:うん、それはすでに固定されていることに気づきました:) –

0

あなたはこのしてみてください、あなたの文字列を「エスケープ」する安全な方法が必要な場合:これは内部escape機能を使用しています

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

を、そして、-stringに%-urlエスケープ形式を変換し、エスケープ形式。

+0

私は当初はうまくいかないと思っていましたが、それはあります。引用符で囲むだけです。唯一の問題は、エンコードが多すぎることです。 OPがパフォーマンスに関心を持っているように見えるので、文字列を2回(エスケープと置き換え)すると、あまりにも多くの作業のように思えるでしょう。 .replace(/%/ g、 '\\ x'); //出力: 「こんにちは\ x20world \ x20 \ x25 \ x20」というエスケープ(「Hello world%&= '' \ n \ t \」] \ x26 \ x20 \ x3 \ x20 \ x27 \ x27 \ x20 \ x0A \ x20 \ x09 \ x20 \ x22 \ x20 \ x5D \ x20 " –

関連する問題