如何用 <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()
函数在换行符之前插入 <br>
标记:
示例 (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"], "<br/>", $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
都将替换为<br>
。但是如果(我不知道它是怎么回事)你仍然可以获得可以使用的新行
str_replace("\r","",$description);
str_replace("\n","",$description);
用空字符串替换不必要的新行。
【讨论】:
\r
in str_replace
似乎取代了一切。此外,您应该将其替换为 <br>
...以上是关于如何用 <br/> 替换换行符或 \r\n?的主要内容,如果未能解决你的问题,请参考以下文章