【问题标题】:Escape quote in web.config connection stringweb.config 连接字符串中的转义引号
【发布时间】:2010-07-05 07:50:17
【问题描述】:

我的网络配置中有一个连接字符串:

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

如您所见,密码中有一个引号 ( " )(由其他部门提供。我无法更改此数据库用户密码)。

我如何必须转义此连接字符串中的引号?

顺便说一句:我已经尝试过 & quot;在字符串中。那没有用 - ado.net 然后得到一个 ArgumenException:“初始化字符串的格式不符合从索引 57 开始的规范。” 57是"在我的连接字符串中。 我还尝试将密码部分包含在 ' - 中也没有用。

还尝试了 "" 和 \" - web.config 无法解析。

感谢您的解决方案:

我不得不将双引号的转义和密码放在单引号中:

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

【问题讨论】:

    标签: asp.net escaping web-config connection-string


    【解决方案1】:

    使用&amp;quot; 而不是" 来转义它。

    web.config 是一个 XML 文件,因此您应该使用 XML 转义。

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

    请参阅this 论坛帖子。

    更新

    &amp;quot; 应该可以工作,但如果没有,您是否尝试过其他一些用于 .NET 的字符串转义序列? \"""?

    更新 2:

    尝试使用单引号作为连接字符串:

    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 中,但不在属性值中,这显然会起作用。
    • @Sebastian P.R. Gingter - 奇怪的是这不起作用。您是否尝试过其他转义序列?
    • 是的。使用 "" 和 \" 时无法解析整个 Web.config。& quot; 未在字符串中替换为 ",并且无法解析查询字符串,从而导致所述错误。如果这么简单,我就不会在这里问了 ;-)
    • @Sebastian P.R. Gingter - 这里的人们无法猜测您尝试了什么以及您知道什么。您需要在问题中包含此类详细信息(就像您现在所做的那样)。
    • 你的 web.config 使用什么编码?
    【解决方案2】:
    connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word"
    

    由于web.config是XML,所以需要对五个特殊字符进行转义:

    &amp;amp; -> &amp; 与号,U+0026
    &amp;lt; -> &lt; 左尖括号,小于号,U+003C
    &amp;gt; -> &gt; 右尖括号,大于号,U+003E
    &amp;quot; -> " 引号, U+0022
    &amp;apos; -> ' 撇号,U+0027

    + 没问题,我想。


    杜克·菲兰补充道: 您还应该用单引号 ' 包装您的密码:

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

    【讨论】:

    • 它是我的 & 符号,在密码中,存储在 web.config 中。很明显,同时也很难追踪。在 web.config 中出现这种情况时,Azure 网站给您的错误 - “页面无法显示,因为发生了内部服务器错误。”它似乎也没有向错误日志写入任何内容。感谢 OP 的提问和您的提醒。
    • 方括号呢? ([])
    • 还有; 字符?
    【解决方案3】:

    如果&amp;quot; 不起作用,请尝试使用&amp;#34;

    【讨论】:

    • 对于字符 &? & ?
    【解决方案4】:

    Odeds 的答案几乎完成了。只需添加一件事。

    1. 像 Emanuele Greco 所说的那样转义 xml 特殊字符。
    2. 像 Oded 所说的那样将密码放在单引号中
    3. (这个是新的)用另一个单勾转义单勾(ref

    拥有这个密码="';这应该是一个有效的连接字符串:

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

    【讨论】:

    • 我认为你的意思是password=''''; 是有效的。但你的建议是唯一对我有用的东西。这实际上也用于其他转义方案。
    【解决方案5】:

    使用&amp;quot; 应该可以。

    【讨论】:

    • 不。不工作。在问这里之前已经尝试过...不会问...
    猜你喜欢
    • 2023-03-20
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 2013-01-06
    相关资源
    最近更新 更多