2016-05-29 181 views
1

我有一個html表單生成BBCode,它是一些在線留言板中使用的html的修改形式。與BBCode最大的區別在於它在標籤上使用括號而不是傳統的小於/大於符號(例如[br])。str_replace(「 r n」)替換兩次,而str_replace(「 n」)替換一次

我的一個表單元素是一個多文本框,可以發送文本,如下列:

橙色

黑色

末有一個\ r \ n的每行不會傳遞到我的輸出,以便我得到:

RedOrangeBlack

我用下面的代碼替換\ r \ n,其中[BR]

$_description = stripslashes($_POST['description']); 
$movie_description = str_replace("\r\n","[br]",$_description); 

輸出是現在:

黑色[BR] [BR]橙色[BR] [BR ]紅色

哪一個太多了。

如果我切換str_replace函數功能:

$movie_description = str_replace("\n","[br]",$_description); 

我得到黑色[BR]橙色[BR]紅色是更好的,但是現在有一個在生產線的2的正面和3的空間。如果我替換\ r而不是\ n結果類似。

我如何獲得的輸出,看起來像:

黑色[BR]橙色[BR]紅

+1

我仍然懷疑觀察,但我已編輯標題以反映索賠。 – user2864740

回答

0

有兩個新行,所以取代他們兩個

$movie_description = str_replace("\r\n\r\n","[br]",$_description); 
+1

這解決了它,謝謝。我發佈我的問題後,我得出了這個結論。 – gregm

0
$movie_description = preg_replace("/(\r?\n)+/","[br]",$_description); 
0

外貌就像你的輸入有多個\r\n序列,而不是最後一個。即單詞之間有一條空白線。

要解決這個問題,您需要確定如果只有一個或多於兩個,您想要執行的操作。

假設你只想在所有情況下使用一個,我建議使用能夠執行通配符(如preg_replace)的命令。

有一個在php preg_replace replacing line break

0

使用的preg_replace一些例子只有一個[br]

$str = 'Red 

Orange 

Black'; 
$str = preg_replace('/\R+/', '[br]', $str); 
echo $str; 

來替換一個或多個換行符輸出:

Red[br]Orange[br]Black 

\R代表任何形式的越線。