2012-03-31 61 views
1

我有一個textarea字段,我允許用戶輸入純文本或HTML。PHP替換雙重換行符<br>

我用乾淨的HTMLPurify HTML,但我想添加一個功能,幫助用戶誰不知道HTML(因此使用純文本):轉換雙換行符(\n\n\r\r\n\r\r\n)成一個<br>。如果有2對雙換行符,把它變成2個<br> S等

基本上是:

Hi, this is some text with a SINGLE linebreak after it. 
Here's some more text. 

This is some text following a double line break. 

會變成這樣:

Hi, this is some text with a SINGLE linebreak after it.Here's some more text. 
This is some text following a double line break. 

使用nl2br()造成這樣的問題:它使用HTML製作比較困難,例如..

<ul> 
<li>List item</li> 
<li>List item</li> 
<li>List item</li> 
</ul> 

轉了編成

<ul> 

<li>List item</li> 

<li>List item</li> 

<li>List item</li> 

</ul> 

這導致了當不應該有額外的項目符號點。

+0

我已經更新了我對爲什麼nl2br不會爲我工作信息的問題。我也嘗試過使用preg_replace,它用
替換了任意數量的連續換行符(因此3,4,5,6換行符將全部替換爲單個
) – fruitcup 2012-03-31 00:40:42

+0

是否有可能檢測用戶何時使用HTML與純文本?你有沒有想過使用像ckEditor或TinyMce這樣的RTE小部件? http://ckeditor.com/ – 2012-03-31 00:46:58

+0

嗯,我想我可以有一個複選框啓用「HTML模式」或什麼.. – fruitcup 2012-03-31 00:49:46

回答

0

前段時間我找到了一個解決方案,現在我正在回答我的一個問題。 HTMLPurify有「汽車的分段」

AutoFormat.AutoParagraph選項

0

嘗試nl2br()

nl2br - 字符串中的所有換行符之前插入HTML換行符

返回字符串 '< BR />' 或 '< BR>' 插入所有換行符(前\ r \ N,\ n \ r,\ n和\ r)。

1

它可能是HTMLPurify,而不是嘗試strip_tags()和使用nl2br(),如果這可以工作,那麼它是絕對HTMLPurify導致的問題。

您也可以嘗試nl2br()使用HTMLPurify之前,那樣你會所有\n\r轉化爲<br />的HTMLPurify之前和尊重<br />增加。