我正在尝试将描述文本字段插入到数据库中。

我以前只是在做这样的事情:

$group_description = mysql_real_escape_string($_POST['group_description']);

但它产生了问题,因为当我从数据库中取出东西时,它们显示为\n\r 字符串而不是新行。

以下是存在该问题的页面示例:

http://www.comehike.com/hikes/hiking_group.php?hiking_group_id=48

所以我试图通过像这样添加 nl2br 来修复它:
$group_description = mysql_real_escape_string(nl2br($_POST['group_description']));

但这只是插入了额外的一行 :( 这是当前问题的示例:

http://www.comehike.com/hikes/hiking_group.php?hiking_group_id=50

这是我使用的插入语句的示例:
$insert_group_sql =  'INSERT INTO hiking_groups( title , group_description ) VALUES ( "'.$group_name.'" , "'.$group_description.'" ) ';

这样做的正确方法是什么?

这是我用来显示 $group_description 的代码
          //Convert all urls to links
          $group_description = preg_replace('#([\s|^])(www)#i', '$1http://$2', $group_description);
          $pattern = '#((http|https|ftp|telnet|news|gopher|file|wais):\/\/[^\s]+)#i';
          $replacement = '<a href="$1" target="_blank">$1</a>';
          $group_description = preg_replace($pattern, $replacement, $group_description);

          $group_description = str_replace("\'" , "'", $group_description );
          $group_description = nl2br($group_description);

          /* Convert all E-mail matches to appropriate HTML links */
          $pattern = '#([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.';
          $pattern .= '[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)#i';
          $replacement = '<a href="mailto:\\1">\\1</a>';
          $group_description = preg_replace($pattern, $replacement, $group_description);

最佳答案

首先,我建议您按照 Spudley 的建议进行操作,将其保留在数据库中的原始格式中,并在显示后进行格式化。
nl2br() 应该可以工作,所以我建议您检查输入数据以准确查看正在输入的内容(如果在将其存储到数据库之前不对其进行格式化,则更容易做到)。它的作用是取\n、\n\r、\r\n 和\r 并插入一个<br/>。例如,您应该检查\n 和\r 之间是否没有空格。

另外,确保你只在一个地方使用 nl2br() ,因为它不会替换新行,它只是插入 <br/> (也就是说,如果你做 nl2br(nl2br($group_description)) 你会得到两个 <br/> )

更新:

我在附加代码中看到,当您显示描述时,您已经有了 nl2br() 。您需要删除其中之一,以便您只添加 <br/> 一次。

另外,而不是这个:

      $group_description = str_replace("\'" , "'", $group_description );
      $group_description = nl2br($group_description);

试试这个:
      $group_description = stripslashes($group_description);
      $group_description = nl2br($group_description);

这应该删除 mysql_real_escape_string() 所做的所有清理工作,这应该可以解决文本中显示的\n\r 问题。

关于php - nl2br() 创建一个额外的新行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6549296/

10-10 03:21