如何用<br/>替换换行符或\ r \ n?


75

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

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

这些都应该起作用,但是我仍然可以换行。它们是双精度的:“ \ r \ r”。那不应该使任何这些失败,对吗?


1
您为什么有裸露的\r换行符?AFAIK甚至MacOSX切换到\n
ThiefMaster

它们来自客户的CSV。
theflowersoftime

Answers:


134

已经有在换行符之前插入标签的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语法不同,特殊字符的变量和转义序列在单引号引起来的字符串中不会扩展。


仔细观察一下,他的OP特别表明他们尝试使用nl2br并且没有用。
蒂姆·比拉瓦

只是尝试在具有双回车符的字符串上运行nl2br,所以效果很好。
Decko 2011年

1
看看我的编辑@ThomasMcCabe。我添加了一些(也许)有用的信息。
Robik

21
请注意,nl2br不能取代,而是INSERTS换行之前,这之前离开NL字符,并增加了BR。
Brock Hensley

但是如果我们有一个带有换行符的文件,并且我们想通过php脚本读取它并解释那些换行符,该怎么办?
user3911183 2015年


17

字符串(单引号字符串,如@Robik)中可能包含实字符“ \”。

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

str_replace(array("\r\n","\r","\n","\\r","\\n","\\r\\n"),"<br/>",$description);

nl2br很好,但是实际上可以(对我的json有用),谢谢!
瓦蒙德18-3-25

6

nl2br() 如您所愿,它应该可以正常工作:

$description = nl2br($description);

'您的示例代码第一行中未包含的内容很可能导致您的问题。在$ description之后删除'

...$description');


3

这可以肯定地工作:

str_replace("\\r", "<br />", $description); 
str_replace("\\n", "<br />", $description); 

绝对不正确的建议。“ foo \\ r \\ nbar”将变为“ foobar”,而不是“ foo <br/> bar”。替换html之前会渲染“ foo bar”。
Artemix 2012年

嗯 在某些输入格式已知的特定情况下适用。
evandentremont 2013年

3

nl2br()对我有用,但是我需要用双引号将变量包装起来:

这有效:

$description = nl2br("$description");

这不起作用:

$description = nl2br($description);

有什么解释?
彼得·莫滕森



-3

如果您使用nl2br,所有出现的\n\r将被替换<br>。但是如果(我不知道这是怎么回事)您仍然可以使用新行

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

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


\rstr_replace似乎取代了一切。而且,您应该将其替换为<br>...
Willem Van Onsem 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.