2012-03-31 32 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 />增加。