4

我为用户设置了一个系统,可以将他们的文章提交到我的数据库中。因为它只是 HTML,我不希望他们知道<br />每次有换行符时都要输入,所以我nl2br()在输入上使用 PHP 函数。

我还提供了一个文章修改工具,它将把他们的文章带回表单(但是这是一个不同的页面)并允许他们编辑它。在这样做时,<br />元素也出现了(仍然有换行符)。为了纠正
出现的元素(无论如何我已经预料到了),我添加preg_replace('/<br(\s+)?\/?>/i', "\n", mysql_result($result,$i,"content"))了我在本网站的另一个问题中找到的元素。它完成了删除<br />元素的工作,但是由于它用换行符替换它们,并且换行符本来会保留,每次编辑帖子时,都会添加越来越多的换行符,每个段落的间距越来越大时间。这是用户无法理解的。

例如,假设我在文章提交表单中输入以下内容:

 Hello, this is my article.
 I am demonstrating a new line here.

这将转换为:

Hello, this is my article.<br />
I am demonstrating a new line here.

请注意,即使换行符已转换,文本中仍然存在换行符。在编辑表单中,<br />将转换回换行符,如下所示:

Hello, this is my article.

I am demonstrating a new line here.

因为<br />已转换为换行符,但已经有换行符。所以我想我期待的是它最初被转换成这样的东西:

Hello, this is my article.<br />I am demonstrating a new line here.

我想知道......有没有办法阻止该nl2br()功能维护原始换行符?可能与Windows\r\n角色有关吗?

4

3 回答 3

2

您描述的问题似乎不是错误,而是bl2br的功能。您可以为它编写自己的函数,例如:

<?php
function NlToBr($inString)
{
    return preg_replace("%\n%", "<br>", $inString);
}
?>

我在 PHP 手册中的 nl2br-function 文档的注释中找到了这个:http: //php.net/manual/de/function.nl2br.php。如果我发布的那个对你不起作用,那么它的来源应该还有很多。

(或者只是使用刚刚发布的另一个答案中的功能,我想这也应该有效)

于 2012-02-26T16:26:32.740 回答
2

您正在使用的功能nl2br用于插入它们,但不替换它们。如果你想替换\n<br />只需要使用str_replace. 像这样:

$string = str_replace("\n","<br />",$string);

在这种情况下绝对不需要正则表达式。

于 2012-02-26T16:29:59.210 回答
1

这应该解决它:

preg_replace('/<br(\s+)?\/?>(?!\s*\n)/i', "\n", mysql_result($result,$i,"content"))

您不能简单地删除中断,因为它们可能在同一行。此正则表达式将用换行符替换所有换行符,但不会替换换行符后面的换行符。

它将留<br>\n在文本中。额外的正则表达式将摆脱它们:

preg_replace('/<br(\s+)?\/?>/i', "", $res)
于 2012-02-26T16:24:41.537 回答