1

当我为 \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”字母。

4

2 回答 2

7

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

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

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

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

编辑 1:例如,请参阅康纳在评论中发布的片段。

编辑 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)
于 2012-07-02T22:45:01.590 回答
3

选项1

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

see\nyou\nsoon\n

...然后你会想要使用这个:

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

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

`

选项 #2

另一方面,如果您有一个正在显示的字符串,如下所示:

see
you
soon

...然后你会想要使用这个:

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

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

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

于 2012-07-02T23:00:26.023 回答