2012-07-02 78 views
4

我的理解是:爲什麼' n'==='\ n'在PHP中爲true?

'\n' // literally the backslash character followed by the character for lowercase n 
"\n" // interpreted by php as the newline character 

但對我的生活,我不明白爲什麼'\n' === '\\n'。在我看來,'\\n'將等於三個獨立的字符:兩個單獨的反斜槓,後面跟着字母n。

爲什麼'\n' === '\\n'在PHP中爲真?

+2

可能重複[在PHP中,我需要逃避反斜槓?](http://stackoverflow.com/questions/3415683/in-php-do-i-need-to-escape-backslashes)和[之間的差異單引號和雙引號字符串在PHP](http://stackoverflow.com/questions/3446216/difference-between-single-quote-and-double-quote-string-in-php) – mario

回答

4

反斜槓仍然是單引號字符串中的轉義字符(它轉義字面單引號)。

例如,這是非法的(因爲反斜槓轉義結束引號):

$path = 'C:\'; 

所以\\必須映射到一個反斜槓,以避免無意逃逸。

+3

+1提供了在單引號字符串中使用\\的唯一正當理由。 (在這個答案之前,我實際上想不出一個)。 –

2

這是因爲'\\n'實際上是\n,因爲反斜槓是一個轉義字符,在單引號中出現奇怪的行爲。它不會逃避n,但逃脫\

10

從手動(section on single quoted strings):

要指定一個單引號,用反斜槓(\)逃脫它。要指定文字反斜槓,請將其加倍(\\)。反斜線的所有其他實例將被視作一個反斜槓

因此在一個單引號字符\n是兩個字符,但\\n是反斜線後面跟有字母「N」 - 即相同的兩個字符。

+0

剛試過http:// codepad.org/xXixnCG9。可以誠實地說,這一個讓我死在裏面 – JoeCortopassi

+3

@joecortopasi:爲什麼?單引號字符串不會解釋它們內部的任何內容,除了反斜槓之外,您可以在單引號字符串中插入文字單引號。 –

+0

由於某種原因,我沒有想到。完全合法的原因:p – JoeCortopassi

相關問題