在PHP中替换\ n或\\ n但不是“n”

时间:2012-07-02 22:43:23

标签: php str-replace

当我为\ n执行str_replace时,它会一直替换我脚本中的所有字母“n”。我试图做的是取代这个“看到\ nyou \ nsoon \ n”来说“很快见到你”。除了它剥离句子中的每一个n。我一直得到这个“看你洙”。

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

简单的问题。也许是nimrodic。谢谢你的时间和的解决方案。

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

    $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”字母。

2 个答案:

答案 0 :(得分:7)

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

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

要替换\n,请仅使用\n

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

修改1 :有关示例,请参阅评论中Conner的代码段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)

答案 1 :(得分:3)

选项#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可能是你最好的选择