【问题标题】: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”。这不应该让这些都失败,对吧?

【问题讨论】:

标签: php html line-breaks nl2br


【解决方案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" 而不是 "foo
      bar"。在替换 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;...
      猜你喜欢
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 2011-03-04
      • 2012-09-22
      相关资源
      最近更新 更多