簡體   English   中英

nl2br() 創建一個額外的新行

[英]nl2br() creates an extra new line

我正在嘗試將描述文本字段插入數據庫。

我以前只是在做這樣的事情:

$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 的問題。

在傳遞給 nl2br 之前嘗試修剪:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM