【问题标题】:Why is '\n' === '\\n' true in php?为什么 '\n' === '\\n' 在 php 中为真?
【发布时间】:2012-07-03 09:38:05
【问题描述】:

我明白了:

'\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 中为真?

【问题讨论】:

标签: php string newline


【解决方案1】:

来自手册(section on single quoted strings):

要指定文字单引号,请使用反斜杠 (\) 对其进行转义。要指定文字反斜杠,请将其加倍 (\\)。所有其他反斜杠实例将被视为文字反斜杠

所以在单引号字符串中,\n 是两个字符,但 \\n 是文字反斜杠,后跟字母“n” - 即相同的两个字符。

【讨论】:

  • 刚刚在codepad.org/xXixnCG9 中尝试过。老实说,这个让我内心有点死
  • @joecortopasi:为什么?单引号字符串不解释其中的任何内容,除了反斜杠,因此您可以在单引号字符串中插入文字单引号。
  • 出于某种我没有想到的原因。完全合理的理由:p
【解决方案2】:

反斜杠仍然是单引号字符串中的转义字符(它转义文字单引号)。

例如这是非法的(因为反斜杠转义了结束引号):

$path = 'C:\';

所以\\ 必须映射到文字反斜杠以避免无意转义。

【讨论】:

  • +1 用于提供在单引号字符串中使用 \\ 的唯一合法理由。 (在这个答案之前,我其实想不出一个)。
【解决方案3】:

这是因为'\\n' 实际上是\n,因为反斜杠是一个转义字符,在单引号中的行为很奇怪。它不会逃逸n,但会逃逸\

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 2011-11-16
    • 2011-05-10
    • 2015-05-04
    • 2013-07-20
    • 1970-01-01
    相关资源
    最近更新 更多