これを避けるために、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));"
JSON.stringify(plainTextStr).replace(/&/, "&").replace(/"/g, """)
引用符で囲まれた属性に安全に埋め込むことができ、JavaScriptインタープリターから見たときに同じ意味を持つ文字列を生成します。
唯一の注意点は、JavaScript文字列リテラルに埋め込む前に、いくつかの nicode 改行(U + 2028およびU + 2029) エスケープする必要がある ですが、JSONでは\r
および\n
エスケープされます。
バックスラッシュでアポストロフィをエスケープします。
onclick="INSERT_PRODUCT('188267','WILL AND GRACE ','32311','L\'ANNIVERSARIO DI NOZZE ','20101113|04|18|','13/11/2010 0.00.00','CANALE 5 ',this);"
質問から完全に明らかではないかもしれませんが、データベースに保存するために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
をフォームフィールドに表示されるように保存します。
この関数は私のために働いた(引用を削除して再び復元する):送信されるデータが入力要素の値であると推測し、
var Url = encodeURIComponent($('#userInput').val().replace("'","\\'"));
次に、元のテキストを再度取得します。
var originalText = decodeURIComponent(Url);
var cmpdetail = cmpdetail.replace(/'/g, "\\'");
私のために働いています。
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>