nl2br()创建一个额外的新行

时间:2011-07-01 14:29:23

标签: php mysql

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

我以前只做过这样的事情:

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

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

以下是包含该问题的网页示例:

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);

2 个答案:

答案 0 :(得分:3)

首先,我建议您按照Spudley的建议,将其保存在数据库的原始格式中,并在显示后对其进行格式化。

nl2br()应该有效,所以我建议您检查输入数据以确切了解输入的内容(如果在将数据存储到数据库之前不进行格式化,则更容易做到)。它的作用是\ n,\ n \ r,\ r \ n和\ r \ n并插入<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 \ n的问题。

答案 1 :(得分:-1)

在传递给nl2br之前尝试修剪:

nl2br( trim($_POST['group_description']) )