web.config 연결 문자열의 이스케이프 따옴표


87

내 웹 구성에 연결 문자열이 있습니다.

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

보시다시피 암호에 인용 부호 ( ")가 있습니다 (다른 부서에서 제공했습니다.이 db 사용자 암호를 변경할 수 없습니다).

이 연결 문자열에서 따옴표를 어떻게 이스케이프해야합니까?

Btw : 나는 이미 시도했다 & 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가 아니라 연결 문자열의 형식입니다. 연결 문자열 "에서 in 값 (키-값 쌍)이있는 경우 값을 '. 따라서 Password=somepass"word작동하지 않지만 작동 Password='somepass"word'합니다.


이것은 작동하지 않습니다. 이것은 평범한 xml에 있지만 속성 값 내에 있지 않으면 눈에 띄게 작동합니다.
Sebastian PR Gingter

@Sebastian PR Gingter-이것이 작동하지 않는다는 것이 이상합니다. 다른 이스케이프 시퀀스를 시도해 보셨습니까?
Oded

예. ""및 \ "를 사용할 때 전체 Web.config를 구문 분석 할 수 없습니다. & quot;는 문자열 내에서"로 대체되지 않으며 쿼리 문자열을 구문 분석 할 수 없어 명시된 오류가 발생합니다. 그것은 쉽게 내가 ;-) 여기에 요청했습니다 않을 것이라고한다면
세바스찬 PR Gingter을

1
@Sebastian PR Gingter-여기 사람들은 당신이 시도한 것과 당신이 알고있는 것을 추측 할 수 없습니다. 귀하의 질문에 이러한 세부 정보를 포함해야합니다 (현재 보유한대로).
Oded

web.config는 어떤 인코딩을 사용합니까?
Matthew Abbott

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의 경우 Azure 웹 사이트에서 제공하는 오류- "내부 서버 오류가 발생하여 페이지를 표시 할 수 없습니다." 오류 로그에도 아무것도 쓰지 않는 것 같습니다. 질문에 대한 OP와이 알림에 감사드립니다.
Timothy Lee Russell

대괄호는 어떻습니까? ([])
Dzianis Yafimau

그리고 ;캐릭터?
Kiquenet

2

경우 &quot;다음 작동하지 않는 시도 &#34;대신에.


그리고 캐릭터 &? & amp; ?
Kiquenet

1

Odeds 답변이 거의 완료되었습니다. 추가 할 한 가지.

  1. Emanuele Greco와 같은 XML 특수 문자를 이스케이프하십시오.
  2. Oded가 말한 것처럼 암호를 작은 따옴표로 묶으십시오.
  3. (이것은 새로운 것입니다) 다른 단일 틱으로 단일 틱 탈출 ( ref )

이 password = " '가있는 경우 유효한 연결 문자열이됩니다.

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

나는 당신이 의미하는 password='''';것이 타당 하다고 생각 합니다. 그러나 당신의 제안은 저에게 효과가 있었던 유일한 것입니다. 이것은 실제로 다른 탈출 계획에서도 사용됩니다.
Bluebaron

0

사용하여 &quot;그 작동합니다.


아니. 작동하지 않습니다. 이미 ... 질문 않았을 것입니다 ... 여기에 요청하기 전에이 시도
세바스찬 PR Gingter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.