在PHP中替换换行符的奇怪行为

时间:2012-04-12 17:16:15

标签: php string str-replace

我在PHP中遇到了一些奇怪的行为。我有<textarea/>输入的一串文字,似乎是:

$text = str_replace(array("\r\n", "\r", "\n"), null, $text);

成功删除换行符,而

$text = str_replace("\n", " ", $text)
$text = str_replace("\r\n", " ", $text)
$text = str_replace("\r", " ", $text)

编辑:上面的三个str_replace调用适用于\ n,\ r \ n和\ r

无法成功删除换行符。我甚至尝试添加:

$text = str_replace(PHP_EOL, " ", $text);

但它无法解决问题。我知道我用空格而不是null替换换行符,但我希望这也可以。执行3-4次str_replace()调用后,如果我:

echo nl2br($text);
实际上它确实找到了一些剩余的换行符。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

来自textarea 总是的文字有\r\n个换行符。

所以你应该做$text = str_replace("\r\n", '', $text);

有关详细信息,请参阅the spec

答案 1 :(得分:1)

您应该使用:

$text = str_replace("\r\n", " ", $text)
$text = str_replace("\r", " ", $text)
$text = str_replace("\n", " ", $text)

$text = str_replace("\r\n", null, $text)
$text = str_replace("\r", null, $text)
$text = str_replace("\n", null, $text)