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

Posted

技术标签:

【中文标题】如何用 <br/> 替换换行符或 \\r\\n?【英文标题】:How can I replace newline or \r\n with <br/>?如何用 <br/> 替换换行符或 \r\n? 【发布时间】:2011-08-22 05:06:29 【问题描述】:

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

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

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

【问题讨论】:

为什么你有裸\r 换行符? AFAIK 甚至 MacOSX 切换到 \n 它们来自客户的 CSV。 How to remove line breaks (no characters!) from the string? 的可能重复项 【参考方案1】:

已经有nl2br() 函数在换行符之前插入 &lt;br&gt; 标记:

示例 (codepad):

<?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,它运行良好。 看看我的编辑@ThomasMcCabe。我添加了一些(可能)有用的信息。 请注意nl2br NOT REPLACE 而是 INSERTS 在换行符之前,它会留下 nl 字符并在它们之前添加 br。跨度> 但是如果我们有一个带有换行符的文件,并且我们想通过 php 脚本读取它并解释这些换行符,该怎么做呢?【参考方案2】:

试试这个:

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

【讨论】:

一个更快的选择可能是 $description = str_replace(["\r\n", "\r", "\n"], "&lt;br/&gt;", $description) 取自 this answer (也可以只使用/\R/ for all CR/LF换行符组合。)【参考方案3】:

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

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

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

【讨论】:

nl2br 很好,但这确实有效(对于我的 json 文件),谢谢!【参考方案4】:

试试这个:

echo str_replace(array('\r\n', '\n\r', '\n', '\r'), '<br>', $description);

【讨论】:

阅读 PHP strings。 '\r\n'"\r\n" 不同。 谢谢@axiac,我没时间测试,但你的意思是应该是"\r\n" 对吧?【参考方案5】:

nl2br() 应该可以正常工作:

$description = nl2br($description);

您的示例代码第一行未关闭的' 更有可能导致您的问题。去掉 $description 后面的 '...

...$description');

【讨论】:

【参考方案6】:

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

这行得通:

$description = nl2br("$description");

这不起作用:

$description = nl2br($description);

【讨论】:

解释是什么?【参考方案7】:

这肯定会起作用:

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

【讨论】:

绝对不正确的建议。 "foo\\r\\nbar" 将变为 "foobar" 而不是 "foobar"。在替换 html 之前呈现“foo bar”。 嗯。适用于输入为已知格式的某些特定情况。【参考方案8】:
$description = nl2br(stripcslashes($description));

【讨论】:

这个答案中缺少解释。【参考方案9】:

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

【讨论】:

【参考方案10】:

如果您使用nl2br,所有出现的\n\r 都将替换为&lt;br&gt;。但是如果(我不知道它是怎么回事)你仍然可以获得可以使用的新行

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

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

【讨论】:

\r in str_replace 似乎取代了一切。此外,您应该将其替换为 &lt;br&gt;...

以上是关于如何用 <br/> 替换换行符或 \r\n?的主要内容,如果未能解决你的问题,请参考以下文章

如何用 <br /> 元素替换字符串中的所有换行符?

正则替换换行符和把 br 替换成换行符

如何用<br />替换CR+LF?

如何用JS代码实现段落换行?

PHP中替换换行符方法总结

asp javascript 如何同时替换文本域中的回车换行<br>和空格 (回车换行然后空格或中间空格)