如果以下字符不需要转义,转义字符应该怎么办?

时间:2010-10-06 15:53:15

标签: language-agnostic escaping

我正在处理的应用程序有一个可以输入字符串的字段。

字符串中的特殊字符会在计算字符串时导致插入不同的内容,但这些特殊字符前面可以跟一个转义字符(反斜杠),这会导致特殊字符按字面输出而不是其特殊含义。

将其视为与正则表达式类似:.匹配任何字符,但\.匹配点。

当转义字符后跟一个不需要转义的字符时,最直观的事情是什么?例如,它会更有意义:

  1. 转义字符“逃避”文字本身:\f变为f(“逃脱的f”)
  2. 转义字符不是转义字符,除非后跟一个特殊字符:\f仍为\f
  3. 错误!抛出一个异常,因为有一个转义字符没有转义
  4. 是无效的

    所有这些都是可能的,在我看来是合理的。但哪个更有意义,哪个在其他语言中最常见?

2 个答案:

答案 0 :(得分:5)

我投票支持第一个解决方案。它使形成字符串变得容易:如果你不知道某个字符在你的上下文中是否具有特殊含义,那就逃避吧。它不会受伤。

答案 1 :(得分:1)

最终,正确答案可能与语言无关。在阿达,我期待选项三,因为它主要是严格执行严格的规则。在Perl中,我希望选择一个或两个,因为它通常更宽松。

由于我主要是一名C ++程序员,所以我会投票给选项4:安排在这种情况下调用函数。 “错误”序列作为参数传递给它,并且它应该返回解释结果或抛出异常。

如果它是一个原生的Windows API,我会期待一些接近C ++解决方案的东西,只是它会建立一系列函数,从最近添加的函数开始,并沿着链向下运行,直到函数返回解释结果,或者它到达链的末尾,默认函数会引发异常。