2011-05-14 65 views
3

我正在編寫一個「bb解析器」的問題。或者,不是與解析器本身,而是nl2br修改它。br的nl2br限量連續顯示?

從數據庫中的字符串是這樣的:

文本的文本的文本

[代碼]代碼代碼代碼[/代碼]

文本的文本的文本

現在,nl2br放一個br /在第一個「文本文本文本」之後,然後是另一個,所以在[code]標籤之前有兩個換行符(實際上是正確的,但不是我想要的)。

有什麼辦法可以限制連續輸入多少個br?我似乎無法找到足夠簡單的解決方案。

在此先感謝,夥計們。

+0

所以你真正要問的是如何找到2個新的行字符並用一個替換? – 2011-05-14 10:11:30

+0

好吧,是的:)並限制所有額外的換行符只顯示第一個,忽略用戶的輸入,如果他們是錯誤的溫度。 – Fredrik 2011-05-14 10:46:54

回答

0

例如,您可以替代兩個換行符(或更多)通過一個使用了preg_replace :-)

+0

感謝您的回覆!然而,我似乎無法讓它工作,因爲
是在不同的行上創建的。你知道怎麼做嗎? – Fredrik 2011-05-14 10:43:43

0

你可以使用

$string = str_replace(array("\r\n\r\n", "\n\r\n\r", "\n\n", "\r\r"), array("\r\n","\n\r","\n","\r"), $string); 

這可以防止雙重<BR>標籤。如果在一行中可能有兩個以上的新行,則前面建議的Preg_replace更好。

+0

謝謝!我正在研究preg_replace解決方案,但正如我對該解決方案進行了評論,在nl2br修改了字符串之後,我無法使其工作,因爲它們在單獨的行上。 – Fredrik 2011-05-14 10:45:32

+0

@Fredrik不客氣!我添加了一個新的解決方案,允許您在nl2br之後修改字符串。請看看它是否適合你的目的。 – AndersTornkvist 2011-05-14 15:46:39

4

除了以前的解決方案,我還添加了一個不同的解決方案,因爲Fredrik提出了要求。這將取代之前的nl2br取代雙重<br>

$string = nl2br($string); 
$string = preg_replace('/(<br(?: \\/)?>\\r?\\n?\\r?)(?=\\1)/is', '', $string); 
+0

非常感謝您的努力,不幸的是我無法讓它工作。我認爲問題在於
分別在不同的行上,每個行都在一行中。你怎麼看? – Fredrik 2011-05-15 06:03:59

+1

@Fredrik謝謝。它適用於: '$ string =「這是第1行\ n這是第2行\ n \ n第4行在空行3之後\ n \ n \ n \ n \ n \ n \ n在一些空行之後再行10。 $ string = nl2br($ string); echo $ string; //連續多個
$ string = preg_replace('/( \\ n?)(?= \\ 1)/是','',$ string); //連續不超過一個
echo「


」。 $ string;' '\\ n?'匹配一個換行符,所以這應該不成問題。你在'nl2br()'後面有一個echo'htmlspecialchars($ string)'的例子嗎?我認爲這將幫助我們解決它。 – AndersTornkvist 2011-05-15 07:30:52

+0

問題可能與'\ n'不同。因此我更新了正則表達式。它現在適合嗎? – AndersTornkvist 2011-05-15 07:38:06