2012-07-17 21 views
27

は私がfollows-javascriptを使用して二重引用符をエスケープ文字の二重引用符に置き換えるにはどうすればよいですか?

デュードとして文字列変数(var str)を持っていると言う、彼は完全に "あなたがロック!" と言っ今、私はそれがようfollows-

男のように見えるようにしていた場合

は、彼は完全に\ "はあなたがロック!\" と言っ

どのように私はJavaScript replace()関数を使用してこれを達成しますか?

str.replace("\"","\\"");はあまりうまく機能しません。それはunterminated string literalエラーを返します。上記の文は、SQLデータベースに格納されるならば

は今、私は実行する必要がある他に何文字列の最適化、LONGTEXT(またはその他のVARCHAR -ish)データ型としてMySQLに言いますか?クォートとカンマは、クエリ文字列にあまり親しみがありません。私はそのことについてもいくつか提案していただきたいと思います。

答えて

44

あなたは、このためのグローバルな正規表現を使用する必要があり、それをこのようにしてみてください

str.replace(/"/g, '\\"'); 

ここに置き換える機能のチェックアウトの正規表現の構文とオプション:

http://www.regular-expressions.info/javascript.html

6

このお試しください:

str.replace("\"","\\\""); // (escape backslashes and embedded double-quotes) 

または、検索を引用して、文字列を置き換えるために、単一引用符を使用します。

str.replace('"','\\"'); // (still need to escape the backslash) 

UPDATEを:最初のパラメータは.replace()に渡された場合、helmusで指摘したように最初のオカレンスだけを置換する文字列です。世界的に交換するには、あなたはg(グローバル)フラグで正規表現を渡すことがあります。

str.replace(/"/g,"\\\""); 
// or 
str.replace(/"/g,'\\"'); 

しかし、なぜあなたもJavaScriptでこれをやっていますか?

var str = "Dude, he totally said that \"You Rock!\""; 

しかし、これは必要なのみ文字列リテラルである:それはあなたのような文字列リテラルを持っている場合は、これらのエスケープ文字を使用してOKです。つまり、JS変数がユーザーがフォームフィールドに入力した値に設定されている場合、このエスケープする必要はありません。

SQLデータベースにこのような文字列を格納することについての質問については、SQL文に文字列リテラルを埋め込む場合には、再度その文字をエスケープする必要があります。また、SQLに適用されるエスケープ文字は ' t(通常)JSと同じです。 SQL関連のエスケープを行うサーバー側を実行します。

+0

このそれは最初の二重引用符をrelaceだけで動作しません –

+0

良い点@helmus - 私は私の答えを更新します。 – nnnnnn

+0

@nnnnnn SQLクエリのエスケープに関する追加情報をありがとう。私が取り組んでいたテストプロジェクトでは、エスケープ文字をサーバーのクエリの文字列として送信する前に、そのエスケープ文字をエスケープすることに決めました。 –

0
var str = 'Dude, he totally said that "You Rock!"'; 
var var1 = str.replace(/\"/g,"\\\""); 
alert(var1); 
関連する問題