45

これを回避するには、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));"
4

7 に答える 7

19
 JSON.stringify(plainTextStr).replace(/&/, "&").replace(/"/g, """)

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

唯一の注意点は、JavaScript 文字列リテラルに埋め込む前に一部のUnicode改行 (U+2028 および U+2029)をエスケープする必要が\rあることですが、JSON ではそれが必要であり\n、エスケープされるだけです。

于 2012-01-05T14:52:34.300 に答える
11

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

onclick="INSERT_PRODUCT('188267','WILL AND GRACE ','32311','L\'ANNIVERSARIO DI NOZZE ','20101113|04|18|','13/11/2010 0.00.00','CANALE 5 ',this);"
于 2012-01-05T14:46:42.600 に答える
7

質問から完全に明確ではないかもしれませんが、データベースに保存するためにこれをPHPスクリプトに送信するだけであると仮定すると、もちろん理想的には次のようなPHPのさまざまなメソッドを利用しますstripslashes()-しかし、実際に試していない場合凝りすぎて、単一引用符の前に 1 つのスラッシュを追加するだけで、クライアント側から PHP に直接 SQL クエリを送信できます。安全ではありませんが、必要ではないかもしれません。

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

トリックを行います。たとえば、次のようなものです。

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

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

于 2013-02-07T01:20:36.790 に答える
1
var cmpdetail = cmpdetail.replace(/'/g, "\\'");

それは私のために働いています。

于 2015-12-15T05:53:00.553 に答える