web-dev-qa-db-ja.com

JavaScript関数パラメーターの単一引用符エスケープ

これを避けるために、JavaScript関数パラメーター内の単一引用符をエスケープする必要があります。

onclick="Javascript:INSERT_PRODUCT('188267','WILL AND GRACE','32311','L'ANNIVERSARIO DINOZZE ','20101113|04|18|','13/11/2010 0.00.00','CANALE 5  ',this);"

ただし、渡される値(データベースからエスケープできないdb変数)がわからないため、関数呼び出し内でエスケープする必要があります。

次のようなことができる機能はありますか?

onclick="Javascript:function(escape(param1), escape(param2), escape(param3));"
42
 JSON.stringify(plainTextStr).replace(/&/, "&").replace(/"/g, """)

引用符で囲まれた属性に安全に埋め込むことができ、JavaScriptインタープリターから見たときに同じ意味を持つ文字列を生成します。

唯一の注意点は、JavaScript文字列リテラルに埋め込む前に、いくつかの nicode 改行(U + 2028およびU + 2029) エスケープする必要がある ですが、JSONでは\rおよび\nエスケープされます。

18
Mike Samuel

バックスラッシュでアポストロフィをエスケープします。

onclick="INSERT_PRODUCT('188267','WILL AND GRACE ','32311','L\'ANNIVERSARIO DI NOZZE ','20101113|04|18|','13/11/2010 0.00.00','CANALE 5 ',this);"
11
Iain M Norman

質問から完全に明らかではないかもしれませんが、データベースに保存するためにPHPスクリプトにこれを送信することだけが必要であると仮定すると、もちろん、stripslashes()-しかし、あまり凝っていたくない場合は、単一引用符の前にスラッシュを1つ追加するだけで、SQLクエリをPHP from 安全ではないですが、必要ないかもしれません。

str.replace(/'/g, "\\'"); // escaping \ with \, so used 2x

たとえば、次のようなものです。

var body = $('#body').val().replace(/'/g, "\\'");
myCustomSQLqueryFunction("UPDATE mytable SET `content`='"+ body +"';" );

MySQLはbodyをフォームフィールドに表示されるように保存します。

7
tim

この関数は私のために働いた(引用を削除して再び復元する):送信されるデータが入力要素の値であると推測し、

var Url = encodeURIComponent($('#userInput').val().replace("'","\\'"));

次に、元のテキストを再度取得します。

var originalText = decodeURIComponent(Url);
4
Irrmich
var cmpdetail = cmpdetail.replace(/'/g, "\\'");

私のために働いています。

1
amit

JavaScript文字列の定義には一重引用符を使用することを好みます。次に、埋め込み二重引用符を次のようにエスケープします。

これは私がそれを行う方法です。基本的にstr.replace(/[\""]/g, '\\"')です。

var display = document.getElementById('output');
var str = 'class="whatever-foo__input" id="node-key"';
display.innerHTML = str.replace(/[\""]/g, '\\"');

//will return class=\"whatever-foo__input\" id=\"node-key\"
<span id="output"></span>
0
Ron Royston