如何在PHP中生成带有反斜杠的字符串?

如何在PHP中生成带有反斜杠的字符串?,php,Php,我需要一个反斜杠作为字符串的一部分。我该怎么做?简短回答: 使用两个反斜杠 长答覆: 有时可以使用一个反斜杠,但有时需要两个。何时可以使用单个反斜杠取决于两件事: 字符串是否由单引号或双引号包围,以及 紧跟在反斜杠后面的字符 如果有双引号字符串,则反斜杠在许多情况下被视为转义字符,因此最好始终使用另一个反斜杠转义反斜杠: $s = "foo\\bar" $string = 'abc\def'; $string = "abc\def"; // $string = 'abc\\def'; $s

我需要一个反斜杠作为字符串的一部分。我该怎么做?

简短回答:

使用两个反斜杠

长答覆:

有时可以使用一个反斜杠,但有时需要两个。何时可以使用单个反斜杠取决于两件事:

  • 字符串是否由单引号或双引号包围,以及
  • 紧跟在反斜杠后面的字符
如果有双引号字符串,则反斜杠在许多情况下被视为转义字符,因此最好始终使用另一个反斜杠转义反斜杠:

$s = "foo\\bar"
$string = 'abc\def';
$string = "abc\def";
//
$string = 'abc\\def';
$string = "abc\\def";
在单引号字符串中,反斜杠将是文字,除非后跟单引号或其他反斜杠。因此,要用一个带引号的字符串输出一个反斜杠,您通常可以这样写:

$s = 'foo\bar'
但要在一行中输出两个反斜杠,您需要:

$s = 'foo\\\\bar'

如果你总是使用两个反斜杠,你就永远不会错。

当反斜杠
\
没有转义字符串的终止引号或创建有效的转义序列(在双引号字符串中)时,你必须转义所有反斜杠,如
“c:\\windows\\”
,然后,这两项中的任何一项都会产生一个反斜杠:

$s = "foo\\bar"
$string = 'abc\def';
$string = "abc\def";
//
$string = 'abc\\def';
$string = "abc\\def";
如果转义下一个字符会导致分析错误(终止字符串的引号)或有效的转义序列(在双引号字符串中),则需要转义反斜杠:

$string = 'abcdef\\';
$string = "abcdef\\";

$string = 'abc\012';
$string = "abc\\012";

(参考)在该特定示例中,齿隙可能是单独的。不过,逃避它是一种很好的做法。但是对于单引号,如果反斜杠在字符串的末尾,则这将不起作用。在单引号中使用双反斜杠在所有情况下都有效-后一个示例无论引号类型如何都更好。我喜欢
if(!preg\u match('/^[\\\\,.\d\pL]*$/u',$\u POST['some\u text']]){…
所以为了避开反斜杠,我不得不使用3个反斜杠\\\。尝试了一个和两个,没有工作。不明白为什么3@user2118559单引号字符串中的前两个将生成一个,第三个单独生成(后面不跟单引号或反斜杠)。因此,在传递给regexp的字符串中插入了两个反斜杠。然后,regexp使用第一个字符来转义第二个字符,从而产生一个“real”(=在文本中真正找到)退格字符。您可以使用四个(四个变为两个,解析字符串,然后剩下的两个变为一个,解析regexp),就像这个答案正确建议的那样。