【问题标题】:Replace \n or \\n in PHP but not "n"在 PHP 中替换 \n 或 \\n 但不是 "n"
【发布时间】:2012-07-03 08:48:47
【问题描述】:

当我为 \n 执行 str_replace 时,它​​会不断替换脚本中的所有字母“n”。我正在尝试用它代替“see\nyou\nsoon\n”来表示“很快再见”。除了它剥离句子中的每个 n 。我不断收到这个“再见”。

是否可以定位,特别是“\n”而不是“n”?

简单的问题。也许尼姆罗迪克。感谢您的时间和解决方案。

编辑 > 添加代码 > 这是我要修复的代码

    $text = "Description: Join us today, Sunday644 \u2022 Pastor Ed Weiss \u2022 Faith World\nOutreach Church \u2022 Bartlett, IL \u2022 Starting at 11:30am,\nfwo.org\/webcast<http:\/\/www.google.com\/url?q=http:\/\/fwo.org\/webcast&ust=1340553597624000&usg=AFQjCNE5g0jUGFl1nDLmKOHuIG8M8y3Wcg>\n";
    preg_match("/Description: ([^\\r\\n]+)/s", $text, $b);
    $text = preg_replace("/\u2022/", "•", $text);
    $text = preg_replace("/[\n\r]/"," ",$text);

    echo $text;

在我的测试中,我丢失了“r”和“n”字母。

【问题讨论】:

  • 你忘了包含你的代码..
  • 您使用的 preg_replace 正则表达式不正确。对于您正在做的事情,可能更容易使用@Corbin 和我在下面描述的 str_replace() 示例之一
  • 我没有忘记... n00bs 可以是 b00bs。对不起。

标签: php str-replace


【解决方案1】:

换行符和n 是两个完全不同的字符。

新行在编程语言中几乎总是表示为\n,然而,它实际上只是字符代码10(十进制)。另一方面,n 是字符代码 110(十进制)。除了转义序列之外,它们之间根本没有任何关系。

要替换 \n 并且仅替换 \n 使用:

$str = str_replace("\n", " ", $string);

编辑 1:例如,请参阅 Conner 在评论中的 sn-p posted

编辑 2:正如 JoeCortopassi 所指出的,PHP 只会在某些类型的字符串文字中解析 \n。例如,'\n' 将以文字 \n 字符串结尾。 (字符 \ 后跟字符 n)。

"\n" //new line (char code 10)
'\n' //literal \ followed by n (char code 92 followed by char code 110)
"\\n" //literal \ followed by n (same as '\n')
'\\n' //literal \ followed by n (same as '\n' :p)

或者:

"\n" === chr(10)
'\n' === "\\n" === '\\n' === chr(92) . chr(110)

【讨论】:

  • 我现在很困惑,如果 OP 想要替换 NL 或文字 '\\n' 而不是。
  • 可能想把这个'\n' === "\\n" === '\\n'编辑成这个'\n' === "\\n"
  • @JoeCortopassi 这三个实际上是相等的,尽管它显然不是有效的 PHP 语法。
  • @JoeCortopassi 我大脑的一部分可以看到它的逻辑,然后我大脑的另一部分会说,“什么--?!” :)
  • @JoeCortopassi 啊!不知何故,单引号的转义使我逃脱了。我所能想到的就是“等等......没有什么需要用单引号转义!”哈哈。 (虽然我不会说他们的设计怪异通常是有正当理由的:p [虽然这实际上不是设计怪异])
【解决方案2】:

选项#1

如果你有一个这样显示的字符串:

see\nyou\nsoon\n

...那么你会想要使用这个:

$str = str_replace('\n', ' ', $string);

...因为 PHP 将显示反斜杠字符后跟“n”字符。您使用单引号,因为 php 将其解释为没有转义字符的 literal string

`

选项 #2

另一方面,如果你有一个这样显示的字符串:

see
you
soon

...那么你会想要使用这个:

$str = str_replace("\n", '', $string);

...因为 php 会将此字符串视为需要为 interpreted 的内容。这意味着将处理变量,并将转义字符(如 \n\t\\)解释为它们的文字字符值。

从您所说的来看,听起来您的字符串中包含应该是新行语句的内容,但从未被解释过,因此 选项#1 可能是您最好的选择

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    相关资源
    最近更新 更多