连接字符串歧义:包含单引号和双引号的引用值

时间:2014-09-28 10:06:45

标签: connection-string

我正在为python编写连接字符串解析器/格式化程序,我遵循以下语法规则:

http://www.connectionstrings.com/formating-rules-for-connection-strings/

  • 忽略所有空白字符(除了放在值内或引号内的字符)
  • 如果分号(;)是值的一部分,则必须用引号(“)分隔:注意:我认为it表示整个值
  • 如果值以双引号(“)
  • 开头,请使用单引号(')
  • 相反,如果值以单引号(')
  • 开头,请使用双引号(“)
  • 不支持转义序列
  • 名称为iNsEnSiTiVe
  • 如果某个关键字包含等号(=),则必须在其前面加上一个额外的等号,表示它是该关键字的一部分。
  • 如果值具有前导或尾随空格,则必须用单引号或双引号括起来,即Keyword =“value”,否则删除空格。

但是如果需要引用一个值(例如由于;)会发生什么情况,并且它自身包含'" ??

例如:

Key1=Value1;Keyw="ab;'"lol";

如果一个值以引号开头,我必须将内容扫描为文字直到相同类型的下一个引用,但事实证明下一个引用它仍然是值的一部分,字符串文字结束一些字符后来。如果用单引号引用该值,则问题将是相同的。

同样,如果关键字包含=符号,我发现了另一个歧义。规则说应该加倍。只要此等号不在关键字的末尾,此机制就可以正常工作。因为我们有:

Key1===jkn23;

无法知道键值对是(Key1==jkn23)还是(Key1=jkn23

如果有适当的逃生系统,生活会很容易......

0 个答案:

没有答案