Do(中的反斜杠)路径需要转义


Do (back-slashes in) paths need to be escaped?

在程序或脚本代码的字符串中放置文件或目录的路径并不罕见。这通常不是*nix系统上的路径的问题,因为它们使用前斜杠,在大多数语言中通常不需要转义,但Windows对路径使用后斜杠,在多数语言中通常do需要转义。

使用C(++)时,通常必须转义字符串中路径的斜杠,因为如果不这样做,大多数编译器都会发出警告,但我看到过其他代码,特别是PHP脚本,它们不会对它们进行转义。例如,我见过无数配置文件中包含类似行的例子:

static $storageDir = 'C:'webgrind'tmp';

表面上,你必须避开这样的路径,我确实认为,也许它们是由那些实际上没有使用Windows的人编写的,他们只是在没有实际测试的情况下将配置数据从Linux外推到Windows,但如果是这样的话,那么代码应该会失败,但它似乎经常有效。

那么,你必须在代码中的字符串中转义路径吗?我问的主要是PHP,因为这是我个人看到这种情况发生最多的地方,但我也对其他/通用的答案持开放态度。

PHP中的单引号字符串不需要双转义。与双引号字符串不同,在双引号字符串中,单数反斜杠后面的小写字母可能会拼写错误。

但是,在单引号字符串中,反斜杠仍然可以自行转义

'abc''abc' == 'abc'abc'

特别是说到路径,前斜杠也可以做

'C:/webgrind/tmp'

单引号禁止除''''之外的所有转义序列,因此无需对其中的反斜杠进行转义,除非它作为字符串文字中的最后一个字符出现。