【问题标题】:How to use nl2br() to handle string with '\r\n'?如何使用 nl2br() 处理带有 '\r\n' 的字符串?
【发布时间】:2011-07-10 17:49:15
【问题描述】:

我在提交表单时通过 textarea 从管理员检索存储在数据库中的产品描述值。当我从数据库中选择描述时,我得到$description = $row['description'];,我想在主页上回显 $description,如下所示:echo nl2br($description); 但我看到"\r\n" 字符而不是创建新行。根据我在这里和网上找到的内容,您的字符串必须在双引号之间使用,如下所示:

echo nl2br("Hello, \r\n This is the description");

现在,数据库中$description 的值实际上是"Hello, \r\n This is the description",但在我的脚本中我必须像这样使用它:

echo nl2br($description);

它不会生成 br,而是输出 \r\n。那么,根据我的经验,我能做什么,我不能在这里使用双引号。

【问题讨论】:

  • 它是否与\\r\\n 中的反斜杠一起存储? nl2br() 在变量上应该没有问题。

标签: php mysql nl2br


【解决方案1】:

可以在将字符串传递给nl2br() 之前将它们翻译成各自的转义序列,如下所示:

$description = nl2br(str_replace('\\r\\n', "\r\n", $description));

但是首先在您的数据库中进行文字转义是什么?

【讨论】:

  • 在插入数据库时​​应该如何处理 $_POST['description'] 以保持新行完整?谢谢。
  • @Manny Calavera:如果您还没有使用 textarea,那么您应该使用它。如果您想确保\r\n 始终成为一个真正的换行符,我想您可以在插入之前简单地运行str_replace(),这样您就不必在获取后执行此操作。
【解决方案2】:

您将\r\n 的字面值存储在数据库中,而不是它们所代表的实际字符。

在您的数据库中验证这一点。如果您在描述字段中看到\r\n,那么您可能在存储数据时转义了反斜杠。

【讨论】:

    【解决方案3】:

    您的文本似乎包含单个字符 \r\n,并且不包含实际的换行符。因此,str_replace() 应该可以完成工作:

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

    【讨论】:

      【解决方案4】:

      nl2br 可以为“is_xhtml”获取第二个(可选)参数,它将为您将\r\n 转换为&lt;br&gt;。只需将您的行更改为:

      echo nl2br($description, TRUE);
      

      【讨论】:

      • 可选参数默认为true。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 2022-01-24
      • 1970-01-01
      相关资源
      最近更新 更多