奇怪的preg_quote行为

时间:2011-07-18 10:38:39

标签: php escaping behavior

我有这段代码

<?php
$a = "\\u0000";
$b =  preg_quote($a);
echo "<br />my own: ".$a;
echo "<br />with preg_quote:". $b;
?>

result is here

一个\字符可能会从我的$a变量中消失?

我认为这是非常令人遗憾的行为/问题,但我真的迷失了这些转义字符。

免责声明:我不是PHP的招手

5 个答案:

答案 0 :(得分:3)

因为\转义了下一个,因为每个\都需要转义。

单个\它会逃脱下一个字符女巫是你,但是\ u不是字符代码所以它显示为一个简单的字符

答案 1 :(得分:1)

因为\确实在字符串中有意义。

即。 \n是新行的字符代码

所以\\是反斜杠的转义版本并且评估为\

答案 2 :(得分:1)

$a="\\"; 

// $a现在是\,因为第一个\转义了另一个\

一切正常

答案 3 :(得分:1)

在$ a中,双反斜杠被评估为转义反斜杠,导致输出反斜杠。

$ b preg_quote中的

将转义两个反斜杠,因为它们是正则表达式元字符。连续导致四个反斜杠,导致输出中有两个反斜杠。

答案 4 :(得分:1)

\\\的转义版本。因此,原始字符串在打印时只显示一个\。但是,preg_quote\字符与另一个\转义,从而导致\\