我正在尝试将描述文本字段插入数据库。
我以前只做过这样的事情:
$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);
答案 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']) )