2011-07-18 140 views
0

我有这样的代码奇怪preg_quote行为

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

result is here

怎么可能一个\字符从我$a变量消失了?

我认为这是非常begginer的行为/问题,但我真的失去了这些转义字符。

免责声明:我不是在PHP

+0

试试'echo“\\”;' – KingCrunch

+3

当您不知道PHP字符串的工作方式时,您如何能成为“不是PHP的初学者”? \ *划痕头\ * – Tomalak

+0

我知道这将显示\,在这种情况下,我知道为什么(因为你会得到解析错误与单一) – genesis

回答

3

初学者,因为\逃脱下一个,作为进行转义每\需求。

用单\逃离了下一个字符女巫是U,但\ u是不是一个字符代码,因此它显示像一个简单的字符

+0

但问题是 - 为什么当它甚至与单一的\?工作? – genesis

+1

用单个''''逃脱下一个字符为''u'',但''u''不是char代码,所以它显示为一个简单的字符 –

+0

转义不一定,但可能。有时候它是必然的(例如“\\ n”到“\ n”不是EOLN) – RiaD

1

因为\确实有字符串的含义。

\n是一个新行煤焦代码

所以\\是反斜杠的转义版本,并评估对\

1
$a="\\"; 

// $a\现在,因为第一\另一个逃生\

一切都好

1

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

in $ b preg_quote会因为它们是正则表达式元字符而转义两个反斜杠。导致连续出现四个反斜杠,导致输出中出现两个反斜杠。

1

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