81

我试图简单地替换一些新行并尝试了三种不同的方法,但我没有得到任何改变:

$description = preg_replace('/\r?\n|\r/', '<br/>', $description);
$description = str_replace(array("\r\n", "\r", "\n"), "<br/>", $description);
$description = nl2br($description);

这些都应该工作,但我仍然得到换行符。它们是双重的:“\r\r”。这不应该使这些失败,对吧?

4

10 回答 10

138

已经有在换行符之前插入nl2br()标签的功能: <br>

示例(键盘):

<?php
// Won't work
$desc = 'Line one\nline two';
// Should work
$desc2 = "Line one\nline two";

echo nl2br($desc);
echo '<br/>';
echo nl2br($desc2);
?>

但如果它仍然不起作用,请确保文本$desciption被双引号。

这是因为单引号不会“扩展”转义序列,例如\n与双引号字符串进行比较。引用 PHP 文档:

注意:与双引号和heredoc 语法不同,特殊字符的变量和转义序列在出现在单引号字符串中时不会被扩展。

于 2011-05-10T06:35:41.943 回答
64

尝试使用这个:

$description = preg_replace("/\r\n|\r|\n/", '<br/>', $description);
于 2011-05-10T06:53:32.387 回答
18

您可能在字符串中有真正的字符“\”(单引号字符串,如@Robik 所说)。

如果你很确定 '\r' 或 '\n' 字符串也应该被替换,这里我不是在谈论特殊字符,而是两个字符 '\' 和 'r' 的序列,然后转义 '\ ' 在替换字符串中,它将起作用:

str_replace(array("\r\n","\r","\n","\\r","\\n","\\r\\n"),"<br/>",$description);
于 2011-05-10T07:12:03.910 回答
8

试试这个:

echo str_replace(array('\r\n', '\n\r', '\n', '\r'), '<br>', $description);
于 2017-03-07T13:28:10.557 回答
6

nl2br()正如你所拥有的,它应该可以正常工作:

$description = nl2br($description);

'您的示例代码第一行的未关闭部分更有可能导致您的问题。删除 $description 后的 '...

...$description');
于 2011-05-10T06:49:43.273 回答
5

nl2br() 为我工作,但我需要用双引号将变量括起来:

这有效:

$description = nl2br("$description");

这不起作用:

$description = nl2br($description);
于 2015-10-28T23:36:26.273 回答
3

这肯定会起作用:

str_replace("\\r", "<br />", $description); 
str_replace("\\n", "<br />", $description); 
于 2012-09-13T23:40:47.467 回答
2
$description = nl2br(stripcslashes($description));
于 2018-11-30T00:09:35.163 回答
0

我认为str_replace(array("\\r\\n", "\\r", "\\n"), " ", $string); 奏效。

于 2018-10-10T07:53:23.180 回答
-3

如果您正在使用nl2br,所有出现的\n\r都将替换为<br>。但是如果(我不知道是怎么回事)你仍然可以使用新的线路

str_replace("\r","",$description);
str_replace("\n","",$description);

用空字符串替换不必要的新行。

于 2011-05-10T06:42:47.030 回答