0

サーバー側で動的に作成された html 文字列があります。

strHTML = "<td><a href""google.com"" onclick=""SaveToDatabase('" + arrString(0) + "','" + arrString(1) + "')""  

arrString(1) の値はjavascript:OpenDoc('ProductManual.pdf','vbShowDoc') です

エラー メッセージ: ')' が必要です

この値をエンコードしてデータベースに保存し、データベースから取得するときにデコードするにはどうすればよいですか?

4

4 に答える 4

2

単純

に置き換える必要があり'ます \'

(C#)

arrString(0)=arrString(0).replace("'",@"\'")
于 2011-09-19T18:17:53.947 に答える
2

問題は、あなたがSaveToDatabase('whatever'、'javascript:OpenDoc(' ProductManual.pdf'、' vbShowDoc')')""であるということです。

ここであなたの引用の問題に注意してください。'javascriptに開始引用符がありますが、終了引用符はOpenDoc('の後にあると見なされます。これは終了引用符ではないため、\'を使用します。引用符を\'でエンコードする必要があります。

http://forums.asp.net/t/1047952.aspxも参照してください。

編集:Mid787が私を打ち負かしたようですが、いくつかの追加情報を提供したいと思いました

于 2011-09-19T18:27:17.817 に答える
1

ユーザーまたは外部ソースからの入力を読み取るときはいつでも、そこから SQL コマンドを作成する前に、常にエスケープする必要があります。

これを行う 1 つの方法は、準備済みステートメントまたはストアド プロシージャを使用し、組み込み関数呼び出しを使用して変数を設定することです。次に、関数がエスケープを処理します。

SQL を手動で作成する必要がある場合は、それをエスケープする関数を記述します。ほとんどの SQL エンジンでは、埋め込まれた一重引用符を探して二重にするだけで十分です。

パット・オハラは「こんにちは」と言った

の中へ

パット・オハラは「こんにちは」と言った

一部の SQL エンジンには、エスケープが必要な他の文字があります。たとえば、Postgres ではバックスラッシュを 2 つ使用する必要があります。

これを行う関数を書くのは簡単で、それを常に使用します。

私はプログラマーと多くの会話をしてきましたが、彼らは、この特定の分野に誰かが見積もりを入力する可能性は低いと考えていたので、この場合は気にしなかったと言っています。しかし、通常、私たちが会話をしている理由は、誰かがそうしたからです. 分析しないで!早くやれよ!シートベルトをしているようなものです。そこに座って、この特定の旅行で事故に遭う可能性を計算できますが、なぜですか? 賢明な運転手は、私道から通りに車を移動するだけでも、常にシートベルトを着用することを無意識に自動的に行います。賢明なデータベース プログラマーは、入力文字列を常にエスケープします。

于 2011-09-20T17:05:56.973 に答える
0

次のような文字列を渡そうとしている場合

INSERT dbo.table(foo) VALUES('foo'bar');

アポストロフィを2倍にする必要があります。

INSERT dbo.table(foo) VALUES('foo''bar');

しかし、@JohnHartsockは絶対に正しいです。アドホックな連結文字列をSQLServerに送信するべきではありません。パラメータを使用すると、この問題を完全に回避できます。

于 2011-09-19T18:26:14.030 に答える