2011-07-18 199 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轉義\字符與另一\,從而導致\\