PHP和字符串中的反斜杠

时间:2012-03-28 12:57:08

标签: php string escaping backslash

谁能告诉我这里发生了什么?

<?php
// true
var_dump('\\ ' === '\ ');

// false
var_dump('\\\\ ' === '\\ ');

// true
var_dump('\\\\ ' === '\\\ ');

3 个答案:

答案 0 :(得分:8)

字符串文字中的

\引入了几种类型的转义序列,\\是文字“\”的转义序列。但是,不解析为转义序列的\也被视为文字“\”。

因此,'\\ '代表字符串“\”,'\\\\ '代表字符串“\\”,就像'\\\ '一样。尝试:

echo '\\\\ ';   -> \\ 

请参阅http://php.net/manual/en/language.types.string.php#language.types.string.syntax.single

答案 1 :(得分:4)

在单引号字符串中,不会插入转义序列。反斜杠只是一个转义字符,如果它紧接在单引号或反斜杠之前。

所以:

var_dump('\\ '); // String (2) "\ "
var_dump('\ '); // String (2) "\ "
// They do match

var_dump('\\\\ '); // String (3) "\\ "
var_dump('\\ '); // String (2) "\ "
// They don't match

var_dump('\\\\ '); // String (3) "\\ "
var_dump('\\\ '); // String (3) "\\ "
// They do match

这是预期的和记录在案的行为,尽管很难将你的表面包裹起来。

答案 2 :(得分:1)

在第一个例子中,你正在比较

"\ " and "\ " which is TRUE
第二次

"\\ " and "\ " which is FALSE

in 3rd

"\\ " and "\\ " which is TRUE

如果你打印出你的字符串

$s = array('\ ', '\\ ', '\\\ ', '\\\\ ');
var_dump($s);

你会得到

array(4) {
  [0]=>
  string(2) "\ "
  [1]=>
  string(2) "\ "
  [2]=>
  string(3) "\\ "
  [3]=>
  string(3) "\\ "
}

所有双斜杠'\\'都已转换为单斜杠'\',并且sigle-slashes保持不变。转义在单引号和双引号字符串中的工作方式相同。