【问题标题】:str_replace("\r\n") replaces twice, while str_replace("\n") replaces oncestr_replace("\r\n") 替换两次,而 str_replace("\n") 替换一次
【发布时间】:2016-09-27 15:24:43
【问题描述】:

我有一个生成 BBCode 的 html 表单,它是一些在线留言板中使用的 html 的修改形式。与 BBCode 最大的不同在于它在标签上使用了括号,而不是传统的小于/大于符号(例如 [br])。

我的表单元素之一是一个多行文本框,可以发送如下文本:

红色

橙色

黑色

在每一行的末尾有一个 \r\n 没有传递给我的输出,所以我得到:

红橙黑

我正在使用以下代码将 \r\n 替换为 [br]

$_description = stripslashes($_POST['description']);
$movie_description = str_replace("\r\n","[br]",$_description);

现在的输出是:

黑色[br][br]橙色[br][br]红色

哪一个 [br] 太多了。

如果我将 str_replace 函数切换为:

$movie_description = str_replace("\n","[br]",$_description);

我得到黑色 [br]橙色 [br]红色更好,但现在第 2 行和第 3 行前面有一个空格。如果我替换 \r 而不是 \n,结果是相似的。

如何获得如下所示的输出:

黑色[br]橙色[br]红色

【问题讨论】:

  • 我仍然对观察结果持怀疑态度,但我已经编辑了标题以反映这一主张。

标签: php string function replace


【解决方案1】:

有两个换行符,所以把它们都替换掉

$movie_description = str_replace("\r\n\r\n","[br]",$_description);

【讨论】:

  • 这解决了谢谢。发布问题后,我得出了这个结论。
【解决方案2】:
$movie_description = preg_replace("/(\r?\n)+/","[br]",$_description);

【讨论】:

    【解决方案3】:

    看起来您的输入有多个 \r\n 序列,而不是最后一个。 IE。单词之间有一个空行。

    要解决这个问题,如果只有一个或两个以上,您需要准确决定要做什么。

    假设您在所有情况下都只需要一个 [br],我建议您使用能够执行通配符的命令,例如 preg_replace。

    php preg_replace replacing line break中有一些例子

    【讨论】:

      【解决方案4】:

      使用 preg_replace 将一个或多个换行符替换为一个[br]

      $str = 'Red
      
      Orange
      
      Black';
      $str = preg_replace('/\R+/', '[br]', $str);
      echo $str;
      

      输出:

      Red[br]Orange[br]Black
      

      \R 代表任何类型的换行符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-21
        • 2016-01-11
        相关资源
        最近更新 更多