2011-05-14 67 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