web.config接続文字列の引用符をエスケープします


87

Web設定に接続文字列があります:

<add name="MyConString" connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass"word" providerName="System.Data.SqlClient" />

ご覧のとおり、パスワードには引用符( ")が含まれています(他の部門から提供されています。このデータベースユーザーのパスワードは変更できません)。

この接続文字列の引用符をエスケープするにはどうすればよいですか?

ところで:私はすでに試しました&quot; 文字列で。それは機能しませんでした-ado.netはArgumenExceptionを受け取りました:「初期化文字列のフォーマットはインデックス57から始まる仕様に準拠していません。」57は&quot; 接続文字列にあります。また、パスワードの部分を 'で囲んでみました-どちらも機能しませんでした。

また、「」と「」を試してみました-web.configは解析できません。

解決策をありがとう:

二重引用符のエスケープとパスワードを一重引用符で囲むことを組み合わせる必要がありました。

<add name="MyConString" connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;word'" providerName="System.Data.SqlClient" />

回答:


109

エスケープする&quot;代わりに使用してください"

web.configはXMLファイルであるため、XMLエスケープを使用する必要があります。

connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word"

このフォーラムスレッドを参照しください。

更新

&quot; 動作するはずですが、動作しないので、.NETの他の文字列エスケープシーケンスをいくつか試しましたか? \"""

アップデート2:

connectionStringを一重引用符で囲んでください。

connectionString='Server=dbsrv;User ID=myDbUser;Password=somepass"word'

または:

connectionString='Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word'

アップデート3:

以下からのMSDN(SqlConnection.ConnectionStringプロパティ):

セミコロン、一重引用符、または二重引用符を含む値を含めるには、値を二重引用符で囲む必要があります。値にセミコロンと二重引用符の両方が含まれている場合、値を一重引用符で囲むことができます。

そう:

connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;word'"

問題はweb.configではなく、接続文字列の形式にあります。接続文字列で、"(キーと値のペアの)値にが含まれている場合は、値をで囲む必要があります'。したがって、機能しPassword=somepass"wordませんが、 Password='somepass"word'機能します。


これは機能しません。これは、プレーンxmlにあるが、属性値内にない場合は、明らかに機能します。
セバスチャンPRギンター2010

@Sebastian PRGingter-これが機能しないのは奇妙です。他のエスケープシーケンスを試しましたか?
2010

はい。文字列内で「」と「」を使用すると、Web.config全体を解析できません。また、クエリ文字列を解析できないため、エラーが発生します。もしそれが
そんなに

1
@Sebastian PR Gingter-ここの人々は、あなたが何を試し、何を知っているかを推測することはできません。あなたはあなたの質問にそのような詳細を含める必要があります(あなたが今持っているように)。
2010

web.configはどのエンコーディングを使用していますか?
マシューアボット

61
connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word"

web.configはXMLであるため、5つの特殊文字をエスケープする必要があります。

&amp;- >& アンパサンド、U + 0026
&lt; - >< 左アングルブラケット、小なり記号、U + 003C
&gt; - >> 直角ブラケット、大なり記号、U + 003E
&quot; - >" 引用符、U + 0022
&apos; - >' アポストロフィ、U + 0027

+は問題ではないと思います。


Duc Filanは次のように付け加えています。パスワードも一重引用符で囲む必要があります'

connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;word'"

これは、web.configに保存されているパスワードのアンパサンドでした。明らかですが、同時に追跡することはかなり非自明です。これがweb.configの場合である場合に、AzureWebサイトで発生するエラー-「内部サーバーエラーが発生したため、ページを表示できません。」エラーログにも何も書き込んでいないようです。質問をしてくれたOPと、このリマインダーをくれたあなたに感謝します。
ティモシーリーラッセル

角かっこはどうですか?([])
DzianisYafimau19年

そして;キャラクター?
キケネット


1

Odedsの答えはほぼ完了しています。追加するのは1つだけです。

  1. エマヌエーレグレコのようなエスケープxmlの特別な文字は言った。
  2. Odedが言ったように、パスワードを一重引用符で囲んでください
  3. (これは新しいものです)単一のティックを別の単一のティックでエスケープします(ref

このpassword = "'を持っている;これは有効な接続文字列である必要があります:

connectionString='Server=dbsrv;User ID=myDbUser;Password='&quot;&amp;&amp;;'

私はあなたが意味することpassword='''';は有効だと思います。しかし、あなたの提案は私のために働いた唯一のものです。これは実際には他のエスケープスキームでも使用されています。
ブルーバロン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.